thinkPHP中使用save方法來更新數據的
save方法的正常執行時返回值是影響的記錄數,出錯時返回false,返回為0和返回false在很多業務場景下都是不同的。
而當修改的內容和原有內容一致的時候返回的也就是0,通常在修改內容的表單中不進行任何修改點擊修改按鈕就是這種情況。
0和false是不同的,盡管作為布爾型時都代表假。0代表的是修改未修改而沒有執行錯誤,false代表執行的時候發生了錯誤。
所以在判斷是否修改成功時不能使用if(....->...->save())作為判斷的條件,而應該使用if(....->...->save()!==false)作為判斷更新執行與否的條件,同時判斷值和類型是否和false匹配。
下面在mysql命令行中舉個例子:
新建個表:
mysql> create table t(id int); Query OK, 0 rows affected (0.85 sec)
插入條數據:
mysql> insert into t(id)values(2); Query OK, 1 row affected (0.24 sec)
進行一條不改變數據的更新語句:
mysql> update t set id=2 where id=2; Query OK, 0 rows affected (0.13 sec) Rows matched: 1 Changed: 0 Warnings: 0
可以注意到Changed為0,說明並未修改內容。更新語句是正常執行的,這就對應着save()返回0的時候。
執行一條改變數據的更新語句:
mysql> update t set id=3 where id=2; Query OK, 1 row affected (0.14 sec) Rows matched: 1 Changed: 1 Warnings: 0
Changed為1,說明這條更新語句修改了內容。對應着save()>0的時候。
再來執行一條錯誤的更新語句:
mysql> update t set id=2 where ida=3; ERROR 1054 (42S22): Unknown column 'ida' in 'where clause'
發生錯誤,對應save()為false的時候。
