thinkphp的CURD中,使用save方法時會出現(xiàn)一個奇怪的問題戈稿,即如果數(shù)據沒有更新(與原數(shù)據相同)西土,返回值判斷為false。其實很久之前就發(fā)現(xiàn)了這個問題鞍盗,一度以為是官方代碼的問題需了,但是一直拖延到最近才想到要去解決這個問題。不得不說:“明日復明日般甲,明日何其多援所。事事待明日,萬事皆蹉跎欣除。”挪略,與君共勉历帚!
在官網上搜索了這個問題之后,發(fā)現(xiàn)官方已經解決了這個問題杠娱,原本的判斷:
$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方法實現(xiàn)的源代碼(3.2.3版本 mysql驅動):
Tp中模型的底層是由pdo類封裝而來的摊求,所以繼續(xù)查找pdo中的rowCount方法:
原因找到了禽拔,因為數(shù)據沒有變動,所以數(shù)據中影響的條數(shù)為零 室叉,返回值為 0睹栖,而 0 在php判斷中又是false,所以就出現(xiàn)了上述的情況茧痕。當使用“===”判斷時野来,由于判斷了變量的類型,0 和 false就不相等了踪旷,問題解決曼氛。