搜索

首页  >  问答  >  正文

Yii2 Mariadb事务提交成功,但数据库中没有保存任何数据。

我有一个代码:

$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粉386318086P粉386318086244 天前489

全部回复(1)我来回复

  • P粉715304239

    P粉7153042392024-03-31 09:04:28

    问题出在代码上。 谢谢,@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();
    }

    回复
    0
  • 取消回复