由于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 ci框架中事物处理,Codeigniter框架的更新事务(transaction)BUG及解决方法相关推荐

  1. ci框架中引入css,php ci框架中加载css和js文件失败的原因和解决方法

    php ci框架中加载css和js文件失败的原因和解决方法 发布时间:2021-07-01 12:08:38 来源:亿速云 阅读:50 作者:chen 本篇内容介绍了"php ci框架中加载 ...

  2. spring框架做全局异常捕获_springboot springmvc抛出全局异常的解决方法

    springboot中抛出异常,springboot自带的是springmvc框架,这个就不多说了. springmvc统一异常解决方法这里要说明的是.只是结合了springboot的使用而已.直接上 ...

  3. EasyUI这个框架用了好久了,总结一下遇到的问题和解决方法

    EasyUI这个框架用了好久了,总结一下遇到的问题和解决方法 参考文章: (1)EasyUI这个框架用了好久了,总结一下遇到的问题和解决方法 (2)https://www.cnblogs.com/y2 ...

  4. mysql+concat函数问题_Mysql5.7中使用group concat函数数据被截断的问题完美解决方法...

    前天在生产环境中遇到一个问题:使用 GROUP_CONCAT函数select出来的数据被截断了,最长长度不超过1024字节,开始还以为是navicat客户端自身对字段长度做了限制的问题.后面故意重新I ...

  5. js中hover事件时候的BUG以及解决方法

    js中hover事件时候的BUG以及解决方法 参考文章: (1)js中hover事件时候的BUG以及解决方法 (2)https://www.cnblogs.com/mmykdbc/p/7464050. ...

  6. eclipse中同步代码PULL报错checkout conflict with files的解决方法

    eclipse中同步代码PULL报错checkout conflict with files的解决方法 参考文章: (1)eclipse中同步代码PULL报错checkout conflict wit ...

  7. div中的table内容过多时不超出div的范围解决方法

    转载自   div中的table内容过多时不超出div的范围解决方法 问题描述: 在做界面展示时,table的内容过多,超出div的大小,看着table的边框盖过了div的边框,不美观. 问题解决: ...

  8. Ubuntu中出现“Could not get lock /var/lib/dpkg/lock”的解决方法

    Ubuntu中出现"Could not get lock /var/lib/dpkg/lock"的解决方法 参考文章: (1)Ubuntu中出现"Could not ge ...

  9. ArchLinux(2013)中的网络配置和静态IP时DNS刷新的解决方法

    ArchLinux(2013)中的网络配置和静态IP时DNS刷新的解决方法 参考文章: (1)ArchLinux(2013)中的网络配置和静态IP时DNS刷新的解决方法 (2)https://www. ...

最新文章

  1. Prism.Interactivity 之 PopupWindowAction 用法简记
  2. 我们眼中的2015年互联网10大产品事件
  3. 免费下载来自阿里巴巴 双11 的《云原生大规模应用落地指南》
  4. 进程前台运行后台运行的相关命令
  5. PythonTip(1)
  6. fatal error: openssl/sha.h: No such file or directory
  7. 三面网易,四面阿里,五年开发经验程序员剑指大厂,java语言程序设计与数据结构进阶篇答案
  8. 【其他】Hexo博客(Next主题)放弃多说,接入网易云跟贴
  9. 空间点集的三角剖分工具——四面体生成器(TetGen)和三维三角剖分包(CGAL)
  10. Windows 常用组合键(热键)
  11. 手把手教你入门深度强化学习(附链接代码)
  12. java高并发系列 - 第1天:必须知道的几个概念
  13. 假期北京旅游请注意了!
  14. 微信实时给服务器发送gps位置,你知道吗?微信聊天发原图暴露你的位置信息
  15. 人工智能公司招聘资深java开发工程师
  16. Lua 之 Lua Window 上的开发环境 SciTE 的安装,并运行第一个 Hello Lua
  17. winform窗体的键盘基本控制
  18. 杰理AC692X,695X,696X方案NFC音响耳机、故事机
  19. 《无线与移动网技术》笔记(二)无线网络物理层技术(非全)
  20. 指令集os系统部署用户应用教程

热门文章

  1. 2021年电工(初级)考试内容及电工(初级)考试技巧
  2. Tree Shaking和DCE
  3. linux中 ~ / . ..分别表示什么
  4. 高版本 MacOS 系统安装旧版 XCode 提示版本过低请前往 Apple Store 下载的解决方法
  5. 到底怎么样的高手才是高手
  6. gradle打包的使用
  7. 中国三维声图像传感器行业市场供需与战略研究报告
  8. 【干货】企业邮箱被列入黑名单如何解除,已解决!
  9. 不会ps,又不想花钱的证件照换底色方法
  10. 华三交换机设置telnet登录