thinkphp
thinkphp copied to clipboard
事务上的一个bug请确认一下
const THINK_VERSION = '3.2.3';
ThinkPHP\Library\Think\Db\Driver.class.php
最近在用到事务开发的时候,发现明明事务回滚了,但是之前的操作还是提交了上去。查了一下相关代码,知道问题出在Driver.class.php 的 $transTimes 参数上面,这是了判断事务是否开启的重要参数。具体分析如下。 第一次开始事务事,调用Model的startTrans,实际上执行 $this->commit(); //这里调用Driver的commit(),第一次运行transTimes会变成 -1 (transTimes--)
$this->db->startTrans(); //这里开始事务,0 == $this->transTimes 才真正开始事务。因为当前transTimes=-1,所以事务实际没有开启。
我自已在Driver的commit()的 $this->transTimes-- 后面,加了一句 if($this->transTimes < 0) $this->transTimes = 0; 测试没问题,不知道有没欠妥地方,请指正。