2009-09-10 66 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的點影響任何行,因爲它什麼也沒變。

+0

該語句正在執行兩次的事實表明OP不打算讓第一個SQL語句更新所有行。 如果是這樣的話,值得記住的是你可以在'UPDATE'語句中使用'LIMIT'子句以及'SELECT'的更常用的用法。 – drewm 2009-09-10 15:35:39