2009-08-03 62 views
1

驅動中有這個doUpdate函數,它將返回此查詢受影響的行數。驅動:如何定義從doUpdate返回的「受影響的行」

問題是,如果不需要更新行(因爲set的值已經與字段值相同),那麼這些行會計算爲受影響的行嗎?

舉個例子,我有如下表:

ID | Name | Books 
1 | S1oon | Me 
2 | S1oon | Me 

讓我們假設我寫了下面的查詢等效的ORM功能:

update `new table` set 
Books='Me' 
where Name='S1oon'; 

什麼會把doUpdate結果恢復?它會返回0(因爲所有的Books列已經是Me,因此不需要更新),還是2(因爲有2行滿足where條件)?

回答

0

它將返回2.

2

引擎蓋下,行走用PDO的PDOStatement對象:: rowCount時()方法返回受影響的行的數目。所以,最簡單的答案就是您將得到「2」,正如您期望的那樣,但更長的答案是它可能略微取決於PDO如何爲您的特定數據庫實現該功能。 (我想如果你沒有拿到2,那應該是PDO的一個bug。)

有關更多信息,請參見the description of rowCount() in the PHP manual

還有一兩件事要記住的是,當行走調用方法(如保存()刪除()),它有望重返數的-行改性並可能導致超過一行正在修改(例如,如果您添加一本書及其作者,然後通過調用book-> save())來使其被插入,則將獲得總數修改的行數。