为了账号安全,请及时绑定邮箱和手机立即绑定

CI怎么判断update是否成功?

CI怎么判断update是否成功?

PHP
狐的传说 2019-03-10 18:14:25
如上代码,CI框架,update语句执行的时候,不管条件满不满足,都返回true,还有所影响的行数。比如说,我编辑id为500的记录的时候,我执行update,刚好执行到update之前,有人删除了这条id为500的记录,我执行update的时候返回tue,影响为0,在这种情况下,我该如何处理.之前用tp,有三种状态,1.影响行数>0表示修改成功2.影响行数为0表示不存在满足条件的数据或者修改失败了;3.===false表示未做任何修改
查看完整描述

3 回答

?
RISEBY

TA贡献1856条经验 获得超5个赞

情况1:有满足条件的记录,网络问题更新失败
情况2:有满足条件的记录,未做任何修改
情况3:没有满足的条件记录,未做任何修改
为了区分情况2和3,只能在判断影响行数之后,再判断满足条件的记录条数,以此来区分!

https://img1.sycdn.imooc.com//5c8f66c80001efbe05450542.jpg

https://img1.sycdn.imooc.com//5c8f66c900011be104240353.jpg

M('book')->where(['id'=>'2'])->save(['isbn'=>'8855777']);

查看完整回答
反对 回复 2019-03-18
?
肥皂起泡泡

TA贡献1829条经验 获得超6个赞

$result=$this->db->update(),这个直接就返回结果了,手册上说的很清楚啊。


更新下:
CI默认用的是mysqli扩展,所以$this->db->affected_rows();,默认调用的就是mysqli::$affected_rows,它返回两种情况:

  • 大于等于0,都算是成功,又分为两种:

    • 大于0,这个绝对是有变化了。
    • 等于0,这个仅仅是说明没有变化,有可能是评论中说的修改不存在的;也有可能是修改存在的,但修改值和原值一样的,那同样是没有变化。
  • 等于-1,这个是错误。

所以,其实有必要用$this->db->affected_rows();吗?他和直接$this->db->update(),返回的没有本质的区别,即便你要用$num=$this->db->affected_rows();,那也是只能if($num>=0){}或者if($num!==-1){}来判定,因为是否为0根本不能作为成功的判定依据。
正常来说在update前都会select取值判定是否存在,如果是在select和update中间又产生删除的情况这种小概率事件的话,大部分情况下即便忽略掉也没有影响,如果实在想处理,那感觉只能更新后再select来取值判定下了。
ps,楼主说thinkphp返回的第二种情况,真的是那样吗?没有研究过,但是thinphp如果用pdo,而没有特殊处理的话,仅仅是-1变为了false,而同样没办法判定等于0的情况吧?

查看完整回答
反对 回复 2019-03-18
?
四季花海

TA贡献1811条经验 获得超5个赞

你这个更新没有加条件,默认会更新所有,自然会返回true.

$res = $this->db->where($where)->update($tablename,$data);
return $this->db->affected_rows();
查看完整回答
反对 回复 2019-03-18
  • 3 回答
  • 0 关注
  • 813 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信