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

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

  [复制链接]
发表于 2012-5-30 15:01:31 | 显示全部楼层
这篇内容挺深奥的,先收藏着。
发表于 2012-6-8 13:46:01 | 显示全部楼层
致19楼 求问:
        一:事务是PHP的事 还是 MYSQL的事?
        二:如果是数据库MYSQL的事。那JAVA 处理事务 和PHP 处理事务 不是一样么。难道数据库驱动不一样,某些数据库方法PHP相对JAVA没有实现?
致红蓝双方:
        我大概看出。你们讨论的在CI中 普通的SQL.CI也包装成事务了 是不是?
发表于 2012-6-29 11:12:04 | 显示全部楼层
在技术讨论交锋中,出现一些不是很好的词语不太应该滴。观点上可以擦出火花,用词上最好不要有不好的词语。
这篇讨论很有意义
发表于 2012-7-3 14:44:09 | 显示全部楼层
好象很复杂,以致于我头很大!!!!!!!!
{:soso_e137:}
发表于 2012-7-17 13:25:08 | 显示全部楼层
手动提交$this->db->trans_commit();就不会有这样的问题了
发表于 2012-7-19 13:26:01 | 显示全部楼层
好文章啊
发表于 2012-7-24 00:01:43 | 显示全部楼层
TO 22楼。
为什么要用事物?
在我个人理解,事物,就是封装了多个数据库操作。比如你要删除一个类别设定,你就必须判断这个类别下是否有新闻(假如是新闻类别),你要删除新闻,你就必须判断这条新闻下是否有评论。
使用事物,是把多次的SQL操作集成在一个逻辑中,从这个角度,用强类型的JAVA,和弱类型的PHP,似乎无差别。可实际情况真的是这样吗?
事物是程序驱动的,事物虽然在数据库的层面操作,但返回的内容仍然需要程序来接收。不要告诉我你不了解PHP和JAVA的区别,否则这样的讨论没有丝毫的意义。
另外,22楼的理解能力有待提高。
如果吧普通的SQL操作也封装成事物,那我只能仰天叹惜一声:欧麦高的!
发表于 2013-3-12 15:29:40 | 显示全部楼层
我也碰到楼主的问题:因为公司的业务还不是很大,下单量没那么频繁。

所以我做了个很详细的日志记录,记录事务里的每条SQL,并且附上执行结果,记录了一个星期,所有的SQL都是成功执行;

问题是:日志记录了SQL和成功的执行结果,但数据库就是找不到这条数据!电话联系下单用户他说显示下单成功,很诡异吧。

显然问题就指向$this->db->trans_complete(); 了;

发表于 2014-10-10 14:00:33 | 显示全部楼层
楼主说的很有道理,我把源码这一块看了一下果然有这个坑。
貌似作者在使用$this->db->query()的时候,都会把trans_status调成false,然后后面的事务提交都会失败。
总结一下,可以这么理解:作者把每一个query()执行之前添加了一个$this->db->trans_start()。这样的话,如果query()执行失败,会导致之后页面的事务都执行后回滚。
要解决这个问题的话,其实最好给query()增加一个是否在事务中的判断,本来trans_depth可以实现的,但是trans_depth这个功能并没有完成。

本版积分规则