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


Posted in PHP onJuly 25, 2014

由于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+DBM的同学录程序(2)
Oct 09 PHP
php学习之流程控制实现代码
Jun 09 PHP
DOM XPATH获取img src值的query
Sep 23 PHP
php中url函数介绍及使用示例
Feb 13 PHP
推荐10个提供免费PHP脚本下载的网站
Dec 31 PHP
php下Memcached入门实例解析
Jan 05 PHP
php读取文件内容的方法汇总
Jan 24 PHP
PHP QRCODE生成彩色二维码的方法
May 19 PHP
php自定义函数转换html标签示例
Sep 29 PHP
PHP多维数组元素操作类的方法
Nov 14 PHP
php unicode编码和字符串互转的方法
Aug 12 PHP
php 自定义函数实现将数据 以excel 表格形式导出示例
Nov 13 PHP
PHP中可以自动分割查询字符的Parse_str函数使用示例
Jul 25 #PHP
PHP获取短链接跳转后的真实地址和响应头信息的方法
Jul 25 #PHP
PHP实现根据设备类型自动跳转相应页面的方法
Jul 24 #PHP
PHP结合JQueryJcrop实现图片裁切实例详解
Jul 24 #PHP
PHP 5.3新增魔术方法__invoke概述
Jul 23 #PHP
php实现与erlang的二进制通讯实例解析
Jul 23 #PHP
PHP使用CURL实现对带有验证码的网站进行模拟登录的方法
Jul 23 #PHP
You might like
PHP中的超全局变量
2006/10/09 PHP
深入理解PHP原理之Session Gc的一个小概率Notice
2011/04/12 PHP
php中替换字符串中的空格为逗号','的方法
2014/06/09 PHP
CI框架出现mysql数据库连接资源无法释放的解决方法
2016/05/17 PHP
Js 获取当前日期时间及其它操作实现代码
2021/03/04 Javascript
jQuery 性能优化指南(2)
2009/05/21 Javascript
js prototype截取字符串函数
2010/04/01 Javascript
用js来解决ajax读取页面乱码
2010/11/28 Javascript
使用JS CSS去除IE链接虚线框的三种方法
2013/11/14 Javascript
javascript模拟枚举的简单实例
2014/03/06 Javascript
JavaScript必知必会(三) String .的方法来自何方
2016/06/08 Javascript
js中使用使用原型(prototype)定义方法的好处详解
2016/07/04 Javascript
标准的js无缝滚动效果
2016/08/30 Javascript
纯javaScript、jQuery实现个性化图片轮播【推荐】
2017/01/08 Javascript
addeventlistener监听scroll跟touch(实例讲解)
2017/08/04 Javascript
ES6关于Promise的用法详解
2018/05/07 Javascript
vue中使用gojs/jointjs的示例代码
2018/08/24 Javascript
Vue 配合eiement动态路由,权限验证的方法
2018/09/26 Javascript
用WebStorm进行Angularjs 2开发(环境篇:Windows 10,Angular-cli方式)
2018/12/05 Javascript
详解小程序横屏方案对比
2020/06/28 Javascript
js实现页面导航层级指示效果
2020/08/25 Javascript
[50:59]2018DOTA2亚洲邀请赛 4.7 总决赛 LGD vs Mineski第四场
2018/04/10 DOTA
[48:31]DOTA2-DPC中国联赛 正赛 Dynasty vs XG BO3 第一场 2月2日
2021/03/11 DOTA
[50:44]DOTA2-DPC中国联赛 正赛 SAG vs Dragon BO3 第二场 2月22日
2021/03/11 DOTA
python求斐波那契数列示例分享
2014/02/14 Python
Python学习笔记之open()函数打开文件路径报错问题
2018/04/28 Python
Python 正则表达式 re.match/re.search/re.sub的使用解析
2019/07/22 Python
django admin 自定义替换change页面模板的方法
2019/08/23 Python
Python目录和文件处理总结详解
2019/09/02 Python
浅谈keras中的keras.utils.to_categorical用法
2020/07/02 Python
全球知名提供各类营养保健品的零售商:Vitamin Shoppe
2016/10/09 全球购物
印度婴儿用品在线商店:Firstcry.com
2016/12/05 全球购物
什么是Web Service?
2012/07/25 面试题
爱国演讲稿400字
2014/05/07 职场文书
师德师风自我剖析材料
2014/09/27 职场文书
2015年教育实习工作总结
2015/04/24 职场文书