thinkphp 更新資料時如果未修改資料,返回結果判斷錯誤,thinkphp返回

來源:互聯網
上載者:User

thinkphp 更新資料時如果未修改資料,返回結果判斷錯誤,thinkphp返回
    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就不相等了,問題解決。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.