2010-09-08 6 views
2

J'ai un champ de comptage dans un tableau que je dois augmenter et c'est ce que j'ai.incrémenter un champ de comptage mysql

$click_tracker_row = mysql_fetch_array($result); 
$current_count = $click_tracker_row['count']; 
$new_count = $current_count + 1; 
$query_wiki ="UPDATE click_tracker SET count = '{$new_count}' WHERE click_tracker_id = '{$click_tracker_row['click_tracker_id']}' LIMIT 1";     
$result = mysql_query($query) ; 

Mais il ne change jamais .... est-il une meilleure façon de le faire et pourquoi cela ne fonctionne comte est un champ entier

Répondre

6

Vous devez simplement mettre à jour ce compteur en utilisant SQL et utiliser mysql_real_escape_string() -fonction de PHP pour éviter l'injection SQL:

$query_wiki ="UPDATE click_tracker SET count = count + 1 WHERE click_tracker_id = '".mysql_real_escape_string($click_tracker_row['click_tracker_id'])."' LIMIT 1"; 

De plus, il y a une faute de frappe dans votre mysql_query() -call. Vous devrez lui transmettre $query_wiki.

+0

Étant donné les données proviennent d'une source fiable (la base de données MySQL) Je ne pense pas que vous auriez besoin pour échapper aux données dans ce scénario. Mais là réside le problème, il interroge la base de données à deux reprises quand une seule requête suffirait, s'il a déjà l'ID (ce qu'il doit) de sorte que la variable, je suis d'accord doit être échappé. –

+0

J'ai ajouté cet indice, car nous ne pouvons pas être sûrs que cela provient d'une source fiable. Mon approche habituelle consiste à m'assurer que c'est vraiment sécuritaire. L'injection SQL n'est pas amusante. Je recommanderais d'utiliser quelque chose comme PDO au lieu des fonctions 'mysql_ *' de PHP. – jwueller

+0

Non seulement la faute de frappe, mais quand 'mysql_fetch_array' a-t-il été recherché par association? – RobertPitt

3

Pour répondre à la première question est-il une meilleure façon de le faire, oui. pour incrémenter un compte dans MySQL, vous ne avez pas besoin de chercher quoi que ce soit aussi longtemps que vous avez l'identifiant à jour et vous devez également vous assurer que l'id est correctement échappé pour la requête.

$id = mysql_real_escape_string($id); // replace $id with however you get the tracker_id 
$query_wiki ="UPDATE click_tracker SET count = count + 1 WHERE click_tracker_id = '{$id}' LIMIT 1"; 

Pour répondre à la deuxième question, pourquoi cela ne fonctionne dans la partie inférieure vous faites un mysql_query($query) au lieu d'un mysql_query($query_wiki).

0
$click_tracker_row = mysql_fetch_assoc($result); 
$query_wiki ="UPDATE `click_tracker` 
       SET `count` = `count` + 1 
       WHERE `click_tracker_id` = '".$click_tracker_row['click_tracker_id']."'   
       LIMIT 1";     
$result = mysql_query($$query_wiki) ; 
0

Si vous avez beaucoup de clics incrémenter alors le compte à chaque clic peut devenir inefficace, car il provoque une tonne de petites mises à jour de base de données. En d'autres termes, vous voulez faire

UPDATE click_tracker SET count = count + 5... 

au lieu de

UPDATE click_tracker SET count = count + 1... 
UPDATE click_tracker SET count = count + 1... 
UPDATE click_tracker SET count = count + 1... 
UPDATE click_tracker SET count = count + 1... 
UPDATE click_tracker SET count = count + 1... 

Voici un article décrivant l'idée. Si vous google php rabbitmq vous pouvez avoir une idée pour savoir comment construire une version php.

Questions connexes