搜尋

首頁  >  問答  >  主體

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粉386318086240 天前487

全部回覆(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
  • 取消回覆