thinkphp 更新数据时如果未修改数据,返回结果判断错误
2015-03-25 09:44
573 查看
thinkphp的CURD中,使用save方法时会出现一个奇怪的问题,即如果数据没有更新(与原数据相同),返回值判断为false。
其实很久之前就发现了这个问题,一度以为是官方代码的问题,但是一直拖延到最近才想到要去解决这个问题。不得不说:“明日复明日,明日何其多。事事待明日,万事皆蹉跎。”,与君共勉!
在官网上搜索了这个问题之后,发现官方已经解决了这个问题,原本的判断:
解决办法: 使用“===”判断返回值即可
问题解决了,但是还是没有搞明白原因,于是又去看了一下save方法实现的源代码(3.2.3版本 mysql驱动):
Tp中模型的底层是由pdo类封装而来的,所以继续查找pdo中的rowCount方法:
原因找到了,因为数据没有变动,所以数据中影响的条数为零 ,返回值为 0,而 0 在php判断中又是false,所以就出现了上述的情况。当使用“===”判断时,由于判断了变量的类型,0
和 false就不相等了,问题解决。
本文来自:Linux学习网
其实很久之前就发现了这个问题,一度以为是官方代码的问题,但是一直拖延到最近才想到要去解决这个问题。不得不说:“明日复明日,明日何其多。事事待明日,万事皆蹉跎。”,与君共勉!
在官网上搜索了这个问题之后,发现官方已经解决了这个问题,原本的判断:
$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就不相等了,问题解决。
本文来自:Linux学习网
相关文章推荐
- thinkphp 更新数据时如果未修改数据,返回结果判断错误
- thinkphp 更新数据时如果未修改数据,返回结果判断错误
- thinkphp 在数据库更新(save)的时候,如果字段没有被修改,会更新失败 和数据的自动验证,插入的时候可以自动验证,但更新的时候就不能验证了
- THinkphp save方法 判断如果没有数据更新 报错问题
- linq to sql统一更新方法,直接返回更新的对象(解决更新后再刷新数据错误显示问题)
- thinkphp更新或者删除数据返回0和false的处理
- mysql中UPDATE更新数据where以另一个selecet子句为结果的1093错误
- "用于更新此列表项的数据无效,您试图更新的域可能只读" 错误修改
- AFNetworking请求数据总是返回错误的修改
- mysql的null数据,c++返回的结果判断
- 修改数据表DataTable某一列的类型和记录值(正确步骤:1.克隆表结构,2.修改列类型,3.修改记录值,4.返回希望的结果)
- 在主函数中提示用户输入用户名和密码。另写一方法来判断用户输入是否正确。该方法分别返回一个bool类型的登录结果和和一个string类型的登录信息。如登录成功,返回true及“登录成功”,若登录失败则返回false及“用户名错误”或“密码错误”(使用out参数)
- mysql中的判断是否有该条数据 如果有返回1 没有返回0
- Common Subsequence 动态规划 不难 但是犯了个错误刚开始 没用标记数组 直接使用a判断 是否为零 结果是测试数据有很多key为零 超时
- springMVC 异常拦截器,判断返回错误视图还是json格式的数据
- 拦截retrofit数据请求返回的信息来判断程序错误点
- 在使用ThinkPHP时候数据更新的时候,save()方法返回值为0的问题!!!!
- 织梦DEDECMS会员发布文章修改后"数据校验不对,程序返回"错误修改方法
- 如何在前台(不限gridview,datalist,repeater)绑定数据后再进行判断,返回想要的结果
- ALV判断修改后是否有不合法数据,有则选中错误行,高亮度显示。