Yii2 Mariadb事務提交成功,但資料庫中沒有儲存任何資料。
P粉386318086
P粉386318086 2024-03-30 23:03:30
0
1
532

我有一個程式碼:

$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();
}
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板