1. 程式人生 > >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就不相等了,問題解決。

相關推薦

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

    thinkphp的CURD中,使用save方法時會出現一個奇怪的問題,即如果資料沒有更新(與原資料相同),返回值判斷為false。其實很久之前就發現了這個問題,一度以為是官方程式碼的問題,但是一直拖延到最近才想到要去解決這個問題。不得不說:“明日復明日,明日何其多。

ORACLE更新資料如果有就更新沒有就插入

a表字段有user_id,status,heart_time三個欄位 b代表臨時資料表,將要比較的值作為b的user_id引數, ON (a.user_id = b.user_id)是比較,後面兩句話是兩條選擇 MERGE INTO 表名 a USING ( SELECT 引數值 as us

thinkphp專案:前端介面中修改資料自動新增selected 或者 checked

在做專案的時候,常常碰到寫修改頁面mod 的時候,前端介面中有些多項選擇checkbox或者單項選擇radio或者列表選擇select預設是要給他們自動新增被選擇狀態的。這個時候封裝一個自動選中函式就一勞永逸,很方便呼叫。 可以用純原生js來實現。我這裡是混合著Jquery寫的,必須先引入才

mybatis+oracle新增資料如果資料存在就更新如果不存在就插入

判斷需要插入的資料是否存在,如果不存在就更新 <insert id="saveBatch" parameterType="java.util.List" >   MERGE INTO 表名 T   USING (  <foreach collection=

oracle mybatis(Mergr into語句帶序列)新增資料如果資料存在就更新如果不存在就插入

merge語法根據源表(也可是臨時生成的表)對目標表進行查詢匹配,匹配成功時執行更新操作,不成功時執行插入操作。1.基本語法:merge into 目標表 Tusing 源表 T1on (T.xx1 = T1.xx1 and T.xx2=T1.xx2/*匹配條件*/)when

MySQL ALTER命令-修改資料表名或者修改資料表字段

需要修改資料表名或者修改資料表字段時,就需要使用到MySQL ALTER命令。 刪除,新增或修改表字段 如下命令使用了 ALTER 命令及 DROP 子句來刪除表的 i 欄位: ALTER TABLE testalter_tbl DROP i; 如果資料表中只剩餘一個欄位則無法使用DROP

使用SQL語句統計資料sum和count函式中使用if判斷條件

首先舉個栗子(不想看的話直接下面看總結): order_type:訂單型別 open_id:使用者唯一標識 SELECT         date(create_time) AS '當天日期',         sum(real_price) AS '當天總收入',

報表查詢資料select*查到資料select具體欄位查不到

首先是select * 語句: 可以看到是可以查尋的,(該表尚未填入資料,是空表) 然後select具體欄位: 可以看到,出現了空指標異常,在頁面上檢視則提示“name”識別符號無效,已經試過多個欄位,且大小寫均試,但都是提示空指標異常。         最後我查詢了一

亡羊補牢面試如果發現回答不好該怎麼辦?

    大家在面試時,哪怕準備再充分,也不都可能一帆風順。請記住:面試回答不好是很正常的,尤其在你剛開始面試的時候。     所以你一定要有良好的心態:面試成了最好,不成的話面試官是免費給你一次鍛鍊的機會,而且免費告訴了你一些面試題,你也是賺的。但如果你一方

java程式應為CRT登入啟動設定編碼造成啟動亂碼

1、以下提供CRT連線程式設定編碼指令碼,字尾為“.vbs” # $language = "VBScript"# $interface = "1.0" Sub Main crt.Screen.Synchronous = True crt.Screen.WaitForString "$ " crt.Scr

JAVA使用HBase根據Rowkey批量查詢資料(一次查多條返回多個記錄)

最近有需求說是根據多個RowKey返回結果集: public static Configuration conf = null; public static Connection connection = null; public static Admin admin = nul

網狐榮耀版android編譯出現“找到工程Android 目標平臺版本應該大於或等於 21”

這個是因為sdk版本設定問題造成的,解決辦法有兩種: 一、安裝如題問題所用到的21sdk; 二、修改app,設定所引用sdk為本機已經安裝的版本號。 安裝sdk,設定環境在以前的環境配置裡面已經詳細說

DB2查詢如果為null值設定預設值

今天在查詢中遇到一個問題,那就是在做左連線查詢時,右表沒有資料,DB2會給一個預設的null值,但在ibatis中我是用int型別接收的,所以就會報錯。 在網上查了一下發現SQL語句中是可以在查詢不到

sharepoint 2013 使用Office Web Apps 查看或編輯office文檔頁面出現:“抱歉出現了問題”錯誤

moss sharepoint officewebapp報錯 sharepoint 使用Office Web Apps 查看或編輯office文檔時頁面出現:“抱歉,出現了問題”錯誤 sharepoint 2013 使用Office Web Apps 查看或編輯office文檔時頁面出現:“抱歉,出現了

Charles修改請求或返回結果

span LV style sof www har mil ont font 1、修改為本地的請求 2、修改為其他請求 3、斷點 https://www.jianshu.com/p/dcc55a61d109 Charles修改請求或返回結果

【轉】jQuery 的 ajax 方法返回結果 readyState=4 並且 status=200 還進 error 方法

err 前端 log 報錯 但是 tail 格式 success ajax 今天在使用jquery.ajax方法去調用後臺方法時,ajax中得參數data類型是"JSON",後臺DEBUG調試,運行正常,返回正常的結果集,但是前端一直都進到ajax的error方法,百思不得

android應用執行中在設定中修改許可權返回應用崩潰

許可權管理 我程式中使用了PermissionsDispatcher進行許可權的管理,具體使用方法,參考Android 6.0執行時許可權詳解。 問題重現 使用PermissionsDispatcher進行程式管理,在程式執行過程中,申請許可權和拒絕許可權都不會

使用springmvc從頁面中獲取資料然後根據獲得的引數資訊進行修改如果修改資料中含有不是基本資料型別的引數。比如傳的引數中有Date型別的資料需要我們進行引數型別轉換。

1.1 需求   在商品修改頁面可以修改商品的生產日期,並且根據業務需求自定義日期格式。 1.2 需求分析   由於日期資料有很多格式,所以springmvc沒辦法把字串轉換成日期型別。所以需要自定義引數繫結。前端控制器接收到請求後,找到註解形式的處理器介面卡,對RequestMapping標記的方法進

Hibernate插入資料取欄位的預設值更新更新修改過的屬性值

         使用Hibernate向資料庫插入或更新資料的時候 ,如果想要取到資料庫欄位的預設值,可以在類的Hibernate對映檔案的Class標籤中加上dynamic-insert和dynamic-update。如果資料庫欄位是可以為空且有預設值 的情況下,只要在

更新資料庫中資料出現: Error Code: 1175. You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column To disable safe m

在資料庫中更新資料時報錯: You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column  To disable safe mode, toggle