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编程之高级技巧——利用Mysql函数
Oct 09 PHP
PHP简单系统查询模块代码打包下载
Jun 07 PHP
php Notice: Undefined index 错误提示解决方法
Aug 29 PHP
PHP图片处理类 phpThumb参数用法介绍
Mar 11 PHP
PHP无限分类(树形类)
Sep 28 PHP
php json与xml序列化/反序列化
Oct 28 PHP
php读取mysql的简单实例
Jan 15 PHP
自编函数解决pathinfo()函数处理中文问题
Nov 03 PHP
PHP学习笔记(三):数据类型转换与常量介绍
Apr 17 PHP
YII Framework框架教程之缓存用法详解
Mar 14 PHP
CI框架源码解读之URI.php中_fetch_uri_string()函数用法分析
May 18 PHP
PhpStorm+xdebug+postman调试技巧分享
Sep 15 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
模拟xcopy的函数
2006/10/09 PHP
PHP iconv 函数转gb2312的bug解决方法
2009/10/11 PHP
php 使用array函数实现分页
2015/02/13 PHP
Thinkphp5框架使用validate实现验证功能的方法
2019/08/27 PHP
JavaScript弹簧振子超简洁版 完全符合能量守恒,胡克定理
2009/10/25 Javascript
深入理解JavaScript系列(15) 函数(Functions)
2012/04/12 Javascript
Jquery选中或取消radio示例
2013/09/29 Javascript
jQuery 获取和设置select下拉框的值实现代码
2013/11/08 Javascript
javascript操作css属性
2013/12/30 Javascript
jQuery中DOM树操作之使用反向插入方法实例分析
2015/01/23 Javascript
js比较日期大小的方法
2015/05/12 Javascript
js判断浏览器类型及设备(移动页面开发)
2015/07/30 Javascript
Bootstrap选项卡动态切换效果
2016/11/28 Javascript
angular中实现li或者某个元素点击变色的两种方法
2017/07/27 Javascript
bootstrap Table插件使用demo
2017/08/07 Javascript
vue服务端渲染的实例代码
2017/08/28 Javascript
[00:12]DAC SOLO赛卫冕冠军 VG.Paparazi灬展现SOLO技巧
2018/04/06 DOTA
python获得两个数组交集、并集、差集的方法
2015/03/27 Python
Python字符串格式化输出方法分析
2016/04/13 Python
利用Python进行数据可视化常见的9种方法!超实用!
2018/07/11 Python
Django 实现购物车功能的示例代码
2018/10/08 Python
python使用itchat模块给心爱的人每天发天气预报
2019/11/25 Python
python通过安装itchat包实现微信自动回复收到的春节祝福
2020/01/19 Python
python编写softmax函数、交叉熵函数实例
2020/06/11 Python
django form和field具体方法和属性说明
2020/07/09 Python
python获取天气接口给指定微信好友发天气预报
2020/12/28 Python
用html5的canvas画布绘制贝塞尔曲线完整代码
2013/08/14 HTML / CSS
科茨沃尔德家居商店:Scotts of Stow
2018/06/29 全球购物
Vision Direct比利时:在线订购隐形眼镜
2019/08/27 全球购物
PHP中如何创建和修改数组
2012/05/02 面试题
Python中如何定义一个函数
2016/09/06 面试题
基层党支部整改方案
2014/10/25 职场文书
学习走群众路线心得体会
2014/11/05 职场文书
北京天坛导游词
2015/02/12 职场文书
2019年让高校“心动”的自荐信
2019/03/25 职场文书
总结Java对象被序列化的两种方法
2021/06/30 Java/Android