TP5更新數據成功,但判斷結果不符


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就不相等了,問題解決。
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM