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加密解密的代码
Oct 09 PHP
基于qmail的完整WEBMAIL解决方案安装详解
Oct 09 PHP
PHP中基本符号及使用方法
Mar 23 PHP
PHP Warning: PHP Startup: Unable to load dynamic library \ D:/php5/ext/php_mysqli.dll\
Jun 17 PHP
PHP 冒泡排序 二分查找 顺序查找 二维数组排序算法函数的详解
Jun 25 PHP
PHP与javascript实现变量交互的示例代码
Jul 23 PHP
帝国CMS留言板回复后发送EMAIL通知客户
Jul 06 PHP
PHP框架Laravel插件Pagination实现自定义分页
Apr 22 PHP
PHP基于简单递归函数求一个数阶乘的方法示例
Apr 26 PHP
PHP实现的登录页面信息提示功能示例
Jul 24 PHP
解决在laravel中leftjoin带条件查询没有返回右表为NULL的问题
Oct 15 PHP
详解PHP服务器如何在有限的资源里最大提升并发能力
May 25 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设计模式 Bridge (桥接模式)
2011/06/26 PHP
PHP中time(),date(),mktime()区别介绍
2013/09/28 PHP
JavaScript使用技巧精萃[代码非常实用]
2008/11/21 Javascript
JavaScript CSS修改学习第三章 修改样式表
2010/02/19 Javascript
关于跨站脚本攻击问题
2011/12/22 Javascript
Javascript中string转date示例代码
2013/11/01 Javascript
js字符串转换成数字与数字转换成字符串的实现方法
2014/01/08 Javascript
javascript中直接引用Microsoft的COM生成Word
2014/01/20 Javascript
使用jQuery时Form表单元素ID和name命名大忌
2014/03/06 Javascript
javascript实现的一个带下拉框功能的文本框
2014/05/08 Javascript
谈谈Jquery ajax中success和complete有哪些不同点
2015/11/20 Javascript
使用jQuery UI库开发Web界面的简单入门指引
2016/04/22 Javascript
数据结构中的各种排序方法小结(JS实现)
2016/07/23 Javascript
Three.js如何实现雾化效果示例代码
2017/09/27 Javascript
django使用channels2.x实现实时通讯
2018/11/28 Javascript
vue ssr服务端渲染(小白解惑)
2019/11/10 Javascript
详解Angular Karma测试的持续集成实践
2019/11/15 Javascript
jQuery实现聊天对话框
2020/02/08 jQuery
Python 输入一个数字判断成绩分数等级的方法
2018/11/15 Python
Python基于聚类算法实现密度聚类(DBSCAN)计算【测试可用】
2018/12/26 Python
Python编程在flask中模拟进行Restful的CRUD操作
2018/12/28 Python
pyhanlp安装介绍和简单应用
2019/02/22 Python
python与js主要区别点总结
2020/09/13 Python
细说CSS3中的选择符
2008/10/17 HTML / CSS
关于html字符串正则判断和匹配的具体使用
2019/12/12 HTML / CSS
美国专营婴幼儿用品的购物网站:buybuy BABY
2017/01/01 全球购物
西海岸男士和男童服装:Johnnie-O
2018/03/15 全球购物
全球速卖通俄罗斯站:AliExpress俄罗斯
2019/06/17 全球购物
意大利在线大学图书馆:Libreria universitaria
2019/07/16 全球购物
大学生就业求职信
2014/06/12 职场文书
高中学生会竞选演讲稿
2014/08/25 职场文书
2014年青年教师工作总结
2014/12/17 职场文书
2015年六一儿童节活动总结
2015/02/11 职场文书
自荐信范文
2019/05/20 职场文书
MySQL中order by的使用详情
2021/11/17 MySQL
《王国之心》迎来了发售的20周年, 野村哲发布贺图
2022/04/11 其他游戏