thinkphp的CURD中,使用save方法時會出現一個奇怪的問題,即如果數據沒有更新(與原數據相同),返回值判斷為false。其實很久之前就發現了這個問題,一度以為是官方代碼的問題,但是一直拖延到最近才想到要去解決這個問題。不得不說:“明日復明日,明日何其多。事事待明日,萬事皆蹉跎。”,與君共勉!
在官網上搜索了這個問題之后,發現官方已經解決了這個問題,原本的判斷:
$result = $Model->where('id=1')->save($data);
if($result) {
echo 'success';
}else{
echo 'false';
}
解決辦法: 使用“===”判斷返回值即可
$result = $Model->where('id=1')->save($data);
if($result !== false) {
echo 'success';
}else{
echo 'false';
}
問題解決了,但是還是沒有搞明白原因,於是又去看了一下save方法實現的源代碼(3.2.3版本 mysql驅動):
Tp中模型的底層是由pdo類封裝而來的,所以繼續查找pdo中的rowCount方法:
原因找到了,因為數據沒有變動,所以數據中影響的條數為零 ,返回值為 0,而 0 在php判斷中又是false,所以就出現了上述的情況。當使用“===”判斷時,由於判斷了變量的類型,0 和 false就不相等了,問題解決。
