php Yii2 Mariadb事务提交正常,但没有任何内容存储在DB中

f8rj6qna  于 2023-01-19  发布在  PHP
关注(0)|答案(1)|浏览(118)

我有一个代码:

$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()方法会抛出异常,但它没有。有办法得到它吗?
先谢谢你了。

wfveoks0

wfveoks01#

原来问题出在代码上,谢谢@Michal Hynčica,你说得没错,有一段是这样的:

foreach (..) {
  $tx = Yii->$app->db->beginTransaction();
  if ($oneRareCondition) {
    continue;
  }

  ...
  $tx->commit();
}

通过在continue;之前添加$tx->commit();解决了这个罕见的if

相关问题