Fantôme incrémentant le champ INT dans la table MySQL ?
Question
Des choses très étranges se produisent dans phpMyAdmin (mySQL)....
La situation:
J'ai une table avec un seul champ contenant une valeur INT appelée « compte ».count était initialement défini sur 0.Une tâche cron appelle un script php toutes les heures qui incrémente le « compte » de un (SET count = count + 1)
.
Le problème:
Le problème peut être observé lorsque j'ouvre le tableau dans phpMyAdmin, puis que j'actualise immédiatement le navigateur :Je peux voir que le « compte » a été incrémenté environ 20 fois en moins d'une seconde.Le laisser tranquille pendant une minute, puis actualiser à nouveau le navigateur montre qu'il a été incrémenté des centaines de fois supplémentaires !Y a-t-il une boucle sans fin quelque part qui appelle ma tâche cron et incrémente le « compte » ?(Ne le pensez pas parce que j'ai mis à jour le script php de crob pour m'envoyer un e-mail lorsqu'il est appelé, et je ne reçois aucun appel...)
Est-ce que quelque chose comme ça est déjà arrivé à quelqu'un ?
La chaîne CRON :
*/15 * * * * /usr/bin/php -q /home/account_name/cron/cron.php test
Le script php :
<?php
class TestCommand extends CConsoleCommand {
private $connection;
public function run($args) {
// Increment counter
$this->connection=Yii::app()->db;
$sql="UPDATE count_converts SET count=count+1 WHERE id=1";
$command=$this->connection->createCommand($sql);
$command->execute();
}
}
?>
MISE À JOUR:
Mystère résolu:J'ai découvert que cela était dû à une mauvaise boucle for imbriquée ailleurs (les deux boucles utilisaient $i)...
La solution
Pourquoi y a-t-il un <br /> et un saut de ligne dans votre chaîne cron ?Changez-le en
*/15 * * * * /usr/bin/php -q /home/account_name/cron/cron.php test