当前位置:  编程技术>php

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

    来源: 互联网  发布时间:2014-08-26

    本文导语:  由于ci事务判断出错回滚的条件是语句是否执行成功,而更新操作时,就算影响的条数为0,sql语句执行的结果过仍然为1,因为它执行成功了,只是影响的条数为0。 下面介绍解决这个问题的方法: 对于一次要执行许多的语句的...

由于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 异常处理部分
    }

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

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


    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 基于 CodeIgniter 开源 CMS Ionize
  • Oauth2 SocialAuth for CodeIgniter
  • CodeIgniter图像处理类代码
  • Codeigniter出现错误提示Error with CACHE directory的解决方案
  • 解决Codeigniter不能上传rar和zip压缩包问题
  • Codeigniter中mkdir创建目录遇到权限问题和解决方法
  • 新浪SAE云平台如何使用codeigniter数据库配置?
  • 使用配置类定义Codeigniter全局变量
  • Codeigniter中禁止A Database Error Occurred错误提示的方法
  • linux iis7站长之家
  • codeigniter上传图片不能正确识别图片类型问题解决方法
  • CodeIgniter中ellipsize()支持中文截断实现方法
  • 解决CodeIgniter伪静态失效
  • 新浪SAE云平台下使用codeigniter的数据库配置
  • CodeIgniter CLI模式简介
  • nginx支持codeigniter的pathinfo模式url重写配置写法示例
  • CodeIgniter输出中文乱码的两种解决办法
  • CodeIgniter安全相关设置汇总
  • 完善CodeIgniter在IDE中代码提示功能的方法
  • 让CodeIgniter的ellipsize()支持中文截断的方法


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3