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 相关文章推荐
dedecms采集中可以过滤多行代码的正则表达式
Mar 17 PHP
php ss7.5的数据调用 (笔记)
Mar 08 PHP
php设计模式 Prototype (原型模式)代码
Jun 26 PHP
php设计模式 Bridge (桥接模式)
Jun 26 PHP
PHP Yaf框架的简单安装使用教程(推荐)
Jun 08 PHP
thinkPHP分组后模板无法加载问题解决方法
Jul 12 PHP
Laravel中服务提供者和门面模式的入门介绍
Nov 06 PHP
详解PHP序列化和反序列化原理
Jan 15 PHP
php微信公众号开发之微信企业付款给个人
Oct 04 PHP
laravel 字段格式化 modle 字段类型转换方法
Sep 30 PHP
Laravel解决nesting level错误和隐藏index.php的问题
Oct 12 PHP
tp5.1 框架查询表达式用法详解
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 替换模板变量实现步骤
2009/08/24 PHP
探讨如何使用SimpleXML函数来加载和解析XML文档
2013/06/07 PHP
完美解决PHP中的Cannot modify header information 问题
2013/08/12 PHP
PHP实现广度优先搜索算法(BFS,Broad First Search)详解
2017/09/16 PHP
TP5框架安全机制实例分析
2020/04/05 PHP
基于JQuery框架的AJAX实例代码
2009/11/03 Javascript
JS简单测试循环运行时间的方法
2016/09/04 Javascript
JS仿淘宝搜索框用户输入事件的实现
2017/06/19 Javascript
React教程之封装一个Portal可复用组件的方法
2018/01/02 Javascript
vuex提交state&&实时监听state数据的改变方法
2018/09/16 Javascript
vue实现form表单与table表格的数据关联功能示例
2019/01/29 Javascript
JavaScript ES6常用基础知识总结
2019/02/09 Javascript
JavaScript实现身份证验证代码实例
2019/08/26 Javascript
查找Vue中下标的操作(some和findindex)
2020/08/12 Javascript
通过JS判断网页是否为手机打开
2020/10/28 Javascript
jenkins自动构建发布vue项目的方法步骤
2021/01/04 Vue.js
[55:45]DOTA2上海特级锦标赛D组败者赛 Liquid VS COL第一局
2016/02/28 DOTA
布同 Python中文问题解决方法(总结了多位前人经验,初学者必看)
2011/03/13 Python
python下os模块强大的重命名方法renames详解
2017/03/07 Python
python 通过可变参数计算n个数的乘积方法
2019/06/13 Python
python获取点击的坐标画图形的方法
2019/07/09 Python
使用python将多个excel文件合并到同一个文件的方法
2019/07/09 Python
python pygame实现挡板弹球游戏
2019/11/25 Python
Python使用xlrd实现读取合并单元格
2020/07/09 Python
Python pysnmp使用方法及代码实例
2020/08/24 Python
Python面向对象多态实现原理及代码实例
2020/09/16 Python
python实现人性化显示金额数字实例详解
2020/09/25 Python
html5+CSS3+JS实现七夕言情功能代码
2017/08/28 HTML / CSS
Athleta官网:购买女士瑜伽服、技术运动服和休闲运动服
2020/11/12 全球购物
在校大学生的职业生涯规划书
2014/03/14 职场文书
和睦家庭事迹
2014/05/14 职场文书
2014年店长工作总结
2014/11/17 职场文书
2014年维稳工作总结
2014/11/18 职场文书
一年级小学生评语大全
2014/12/25 职场文书
施工单位工程部经理岗位职责
2015/04/09 职场文书
mongodb数据库迁移变更的解决方案
2021/09/04 MongoDB