2009-09-10 6 views
3

Bonne journée!PDO ne pas exécuter deux fois les mêmes requêtes?

Je suis en train d'exécuter la même déclaration de mise à jour avec les mêmes params deux fois et il semble qu'il ne soit pas exécuté dans le second cas:

$update_query = $this->db->connection->prepare('UPDATE `Table SET `field` = :price WHERE (`partnum` = :partnum)'); 

$update_query->execute(array('price' => 123, 'partnum' => test)); 
var_dump($update_query->rowCount()); //returns 1 

// If I insert here any statement it works as expected 

$update_query->execute(array('price' => 123, 'partnum' => test)); 
var_dump($update_query->rowCount()); //returns 0! 

Je n'ai pas le cache de requêtes MySQL activé.

Merci!

Répondre

6

Si UPDATE ne change pas les données dans une rangée, MySQL ne compte pas cette ligne comme affectée:

mysql> SELECT val FROM t_source2 WHERE id = 1; 
+-----+ 
| val | 
+-----+ 
| 10 | 
+-----+ 
1 row in set (0.00 sec) 

mysql> UPDATE t_source2 SET val = 1 WHERE id = 1; 
Query OK, 1 row affected (0.00 sec) 
Rows matched: 1 Changed: 1 Warnings: 0 

mysql> UPDATE t_source2 SET val = 1 WHERE id = 1; 
Query OK, 0 rows affected (0.00 sec) 
Rows matched: 1 Changed: 0 Warnings: 0 

La deuxième déclaration UPDATE ne menait, mais affecté aucune ligne du point de vue MySQL, puisqu'il rien changé.

+0

Le fait que l'instruction soit exécutée deux fois suggère que l'OP n'avait pas l'intention que la première instruction SQL mette à jour toutes les lignes. Si c'est le cas, rappelons que vous pouvez utiliser la clause 'LIMIT' sur les instructions' UPDATE' ainsi que l'utilisation plus courante de 'SELECT'. – drewm

Questions connexes