Yii2 Mariadb事务提交成功,但数据库中没有保存任何数据。
P粉386318086
P粉386318086 2024-03-30 23:03:30
0
1
530

我有一个代码:

$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。但最终提交后数据库中仍然没有保存任何内容。

如果我删除事务,代码就会工作,所有内容都会存储在数据库中,就像过去使用事务一样。

我想确保更改的完整性,想回到事务内部。 或者,至少,我想了解哪些代码(或数据库状态或其他任何内容)阻止存储数据,以及为什么我没有收到任何异常并且回显“错误”,因为事务无法提交。

我确信如果事务提交失败(实际上写入数据库),commit() 方法会抛出异常,但事实并非如此。有办法获取吗?

提前非常感谢您。

P粉386318086
P粉386318086

全部回复(1)
P粉715304239

问题出在代码上。 谢谢,@Michal Hynčica,你确实是对的。 有一个部分是这样的:

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

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

通过在 continue; 之前添加 $tx->commit(); 解决了这个很少发生的 if:

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

  ...
  $tx->commit();
}
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板