2009-04-26 6 views
0

J'essaie de suivre ce que les utilisateurs recherchent sur mon site (à partir d'un simple formulaire de recherche sur la première page) avec PHP et MySQL.Pourquoi ma requête MySQL INSERT insère-t-elle 3 lignes identiques?

A la fin de toutes mes questions que je me sers de cette requête:

INSERT INTO `DiggerActivity_Searches` (
`SearchTerms`, 
`SearchType`, 
`NumResults`, 
`Location`, 
`Date`, 
`Time` 
) VALUES (
'SearchKeywords', 
'SearchTypes', 
'NumberOfResults', 
'User'sLocation', 
'CurDate', 
'CurTime' 
) 

Maintenant, chaque fois qu'il ya un nouveau mot-clé de recherche, il insère 3 lignes identiques. Cependant, si j'actualise la page, elle insère seulement 1 ligne, comme il se doit.

Les valeurs sont transmises en tant que GET comme ça (je mod réécrit les choses URL):

http://www.mysite.com/Search-Category-Search_these_words

+0

Et à quoi ressemble votre script? – Gumbo

+0

Pouvez-vous également coller la définition de la table. Peut-être un problème avec vos clés ou l'absence de clé primaire. –

+0

Hors sujet: Pourquoi avez-vous une colonne de date et une colonne de temps? N'est-il pas préférable d'utiliser le type DateTime et une colonne? – Svish

Répondre

3

Vous pouvez vérifier d'abord si votre script exécute la requête trois fois ou le script est invoqué trois fois (par exemple par un navigateur addons).
Si vous ne disposez pas d'un débogueur installé, vous pouvez utiliser quelque chose comme

 
function trace_log() { 
    static $magic = null; 
    if (is_null($magic)) { 
     $magic = uniqid(); 
    } 

    $s = $magic . ' '. microtime(true) . ":\r\n"; 
    foreach(debug_backtrace() as $d) { 
     $s .= ' '. $d['file'].'@'.$d['line']."\r\n"; 
    } 

    file_put_contents('trace_log.txt', $s, FILE_APPEND); 
} 

... 
trace_log(); 
mysql_query(....) // or stmt->execute() or whatever you use to execute the query. 

Si la première valeur de chaque entrée du journal (l'identifiant « magique ») dans les changements de trace_log.txt, votre script est invoqué à plusieurs reprises. S'il en est de même pour les trois appels à trace_log(), votre script exécute la requête trois fois.

1

Votre table manque une clé primaire. Id suggèrent un PK comme ID de recherche ou quelque chose de similaire

En savoir plus sur ce à Unique key - Wikipedia

0

Sachez que vous n'êtes pas seul face à ce bug étrange.

Ce même problème est apparu sur mon site ces derniers jours. La seule chose que j'ai récemment ajoutée était une bannière publicitaire de tiers.

SOLUTION: J'ai commenté le script publicitaire bannière (Indice: du moteur de recherche qui commence par un G) et tout allait bien à nouveau.

0

J'allais faire une vente de commentaires ont besoin de plus de réputation si ...

Quoi qu'il en soit, comme arrivé à moi. Il s'avère que je renvoyais des informations de débogage au-dessus de l'en-tête provoquant le rechargement automatique du navigateur. Le moyen le plus simple de vérifier est d'utiliser

<script type="text/javascript">alert("loading");</alert> 

dans l'en-tête et de voir combien de fois vous le voyez.

Questions connexes