我有一个代码:
$tx = Yii::$app->db->beginTransaction();
try {
// CODE (a lot of active-record reads and writes)
$tx->commit();
echo "All good!";
} catch (\Throwable $ex) {
$tx->rollback();
echo "Error";
}
它执行,我得到"一切正常!"作为结果。但是,没有得到实际存储在数据库中。代码已经工作了几个月,到目前为止,并没有修改。它突然停止工作昨天。
经过一个小时的调试,我可以确认操作进行得很好,我可以"回显"中间结果,包括我插入的记录的ID,但是在最后提交之后仍然没有任何东西保存在DB中。
如果我删除了transaction,代码就可以工作了,所有的东西都存储在DB中,就像以前有Transaction时一样。
我想确保更改的完整性,想回到事务内部,或者至少想了解哪些代码(或DB状态或其他)阻止了数据的存储,以及为什么事务提交失败后,我没有收到任何异常和"Error"回显。
我确信如果事务提交失败(实际上是写DB),commit()方法会抛出异常,但它没有。有办法得到它吗?
先谢谢你了。
1条答案
按热度按时间wfveoks01#
原来问题出在代码上,谢谢@Michal Hynčica,你说得没错,有一段是这样的:
通过在
continue;
之前添加$tx->commit();
解决了这个罕见的if
。