Codeigniter框架的更新事务(transaction)BUG及解决方法

 更新时间:2014年07月25日 11:05:15   投稿:junjie  
这篇文章主要介绍了Codeigniter框架的更新事务(transaction)BUG及解决方法,具体BUG和解决办法在文中有详细描述,需要的朋友可以参考下

由于ci事务判断出错回滚的条件是语句是否执行成功,而更新操作时,就算影响的条数为0,sql语句执行的结果过仍然为1,因为它执行成功了,只是影响的条数为0。

下面介绍解决这个问题的方法:

对于一次要执行许多的语句的事务

只需在更新操作下根据影响条数是否为0来决定是否会滚即可,下面假设第二条语句为更新操作。

复制代码 代码如下:

//采用 Codeigniter 事务的手动模式
    $this->db->trans_strict(FALSE);
    $this->db->trans_begin();
       
    $this->db->query('SELECT ...');//SELECT 操作无需特殊处理
    $this->db->query('INSERT ...');//INSERT 出错会有 Codeigniter 自动处理
       
    $this->db->query('UPDATE ...');
    if (!$this->db->affacted_rows()) {//上面的 UPDATE 失败则回滚
        $this->db->trans_rollback();
        //@todo 异常处理部分
        exit();//需要终止或跳出,以免下面的 SQL 代码继续执行!
    }
       
    $this->db->query('DELETE ...');
    if (!$this->db->affacted_rows()) {//上面的 DELETE 失败则回滚
        $this->db->trans_rollback();
        //@todo 异常处理部分
        exit();//需要终止或跳出,以免下面的 SQL 代码继续执行!
    }
       
    $this->db->query('SELECT ...');//SELECT 操作无需特殊处理
    $this->db->query('INSERT ...');//INSERT 出错会有 Codeigniter 自动处理
       
    if ($this->db->trans_status() === TRUE) {
        $this->db->trans_commit();
    } else {
        $this->db->trans_rollback();
        //@todo 异常处理部分
    }

如果一次执行的语句不是很多,可以在最后做一下判断来决定回滚

若语句中没有更新操作,用自动事务就可以。

相关文章

  • php定时执行任务设置详解

    php定时执行任务设置详解

    这篇文章主要介绍了php定时执行任务设置的方法,非常简单,有需要的小伙伴参考下。
    2015-02-02
  • PHP实现linux命令tail -f

    PHP实现linux命令tail -f

    tail 命令从指定点开始将文件写到标准输出.使用tail命令的-f选项可以方便的查阅正在改变的日志文件,tail -f filename会把filename里最尾部的内容显示在屏幕上,并且不但刷新,使你看到最新的文件内容.接下来通过本文给大家介绍PHP实现linux命令tail -f,需要的朋友参考下
    2016-02-02
  • WordPress中访客登陆实现邮件提醒的PHP脚本实例分享

    WordPress中访客登陆实现邮件提醒的PHP脚本实例分享

    这篇文章主要介绍了WordPress中访客登陆实现邮件提醒的PHP脚本实例分享,类似于社交网站的异地IP登陆提醒,不过IP所在地显示的实现并没有在本文介绍范围中,需要的朋友可以参考下
    2015-12-12
  • 微信支付扫码支付php版

    微信支付扫码支付php版

    这篇文章主要为大家详细介绍了微信支付,php扫码支付源码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-07-07
  • PHP使用fopen与file_get_contents读取文件实例分享

    PHP使用fopen与file_get_contents读取文件实例分享

    这篇文章主要介绍了PHP使用fopen与file_get_contents读取文件实例分享的相关资料,需要的朋友可以参考下
    2016-03-03
  • 使用laravel指定日志文件记录任意日志

    使用laravel指定日志文件记录任意日志

    今天小编就为大家分享一篇使用laravel指定日志文件记录任意日志,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-10-10
  • php实现的短网址算法分享

    php实现的短网址算法分享

    这篇文章主要介绍了php实现的短网址算法,理论上支持1,073,741,824个短网址,个人使用足够了,需要的朋友可以参考下
    2014-06-06
  • Zend Framework实现留言本分页功能(附demo源码下载)

    Zend Framework实现留言本分页功能(附demo源码下载)

    这篇文章主要介绍了Zend Framework实现留言本分页功能,详细分析了Zend Framework实现留言本所涉及的控制器动作,分页样式及模板调用技巧,并附代码demo源码供读者下载参考,需要的朋友可以参考下
    2016-03-03
  • 提交表单后 PHP获取提交内容的实现方法

    提交表单后 PHP获取提交内容的实现方法

    下面小编就为大家带来一篇提交表单后 PHP获取提交内容的实现方法。小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-05-05
  • php使用array_chunk函数将一个数组分割成多个数组

    php使用array_chunk函数将一个数组分割成多个数组

    这篇文章主要介绍了php使用array_chunk函数将一个数组分割成多个数组,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2018-12-12

最新评论