2009-09-10 4 views
3

Добрый день!PDO не запускают одинаковые запросы дважды?

Я пытаюсь запустить тот же оператор обновления с тем же Params дважды, и кажется, что это не выполняется во втором случае:

$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! 

не включена кэш запросов MySQL.

Спасибо!

ответ

6

Если UPDATE изменений никаких данных в строке, MySQL не считает эту строку, как влияет:

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 

Второго UPDATE заявление сделали выполнить, но не влияет ни одной строки из точки MySQL «s зрений, так как оно ничего не изменил.

+0

Тот факт, что оператор выполняется дважды, предполагает, что ОП не намеревался, чтобы первый оператор SQL обновил все строки. Если это так, стоит вспомнить, что вы можете использовать предложение 'LIMIT' в операторах UPDATE, а также более часто используемое для' SELECT'. – drewm