用户
 找回密码
 入住 CI 中国社区
搜索
楼主: Hex
收起左侧

[数据库] CI中关于DB事务处理的设计缺陷

  [复制链接]
发表于 2014-10-10 14:00:33 | 显示全部楼层
楼主说的很有道理,我把源码这一块看了一下果然有这个坑。
貌似作者在使用$this->db->query()的时候,都会把trans_status调成false,然后后面的事务提交都会失败。
总结一下,可以这么理解:作者把每一个query()执行之前添加了一个$this->db->trans_start()。这样的话,如果query()执行失败,会导致之后页面的事务都执行后回滚。
要解决这个问题的话,其实最好给query()增加一个是否在事务中的判断,本来trans_depth可以实现的,但是trans_depth这个功能并没有完成。
发表于 2016-4-7 15:47:37 | 显示全部楼层
挖个坟
=============
事务开始
start 或 begin
     ||
     \/
各种query操作
     ||
     \/
事务结束
complete 或 off
================
如果不是手动打开或关闭,那“各种query操作”都是事务的一部分,所以在开发的时候尽量不要用complete这种自动判断后得出结果的操作。而是自己判断结果并手动关闭。

本版积分规则