Transaksi Yii2 Mariadb berjaya diserahkan, tetapi tiada data disimpan dalam pangkalan data.
P粉386318086
P粉386318086 2024-03-30 23:03:30
0
1
492

Saya ada kod:

$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";
}

Ia dilaksanakan dan saya mendapat "Semuanya baik-baik saja!" Walau bagaimanapun, tiada apa yang sebenarnya disimpan dalam pangkalan data. Kod ini telah berjalan selama beberapa bulan sekarang tanpa pengubahsuaian. Ia tiba-tiba berhenti berfungsi semalam.

Selepas sejam menyahpepijat, saya boleh mengesahkan bahawa operasi berfungsi dengan betul dan saya boleh "bergema" hasil perantaraan, termasuk ID rekod yang ingin saya masukkan. Tetapi selepas penyerahan akhir, tiada apa yang disimpan dalam pangkalan data.

Jika saya mengalih keluar transaksi, kod itu berfungsi dan semuanya disimpan dalam pangkalan data seperti biasa dengan transaksi.

Saya ingin memastikan integriti perubahan dan ingin kembali ke dalam transaksi. Atau, sekurang-kurangnya, saya ingin memahami kod (atau keadaan pangkalan data atau apa sahaja) yang menghalang data daripada disimpan, dan mengapa saya tidak mendapat sebarang pengecualian dan menggemakan "ralat" kerana transaksi tidak dapat dilakukan.

Saya pasti bahawa kaedah commit() akan mengeluarkan pengecualian jika komit transaksi gagal (sebenarnya menulis ke pangkalan data), tetapi itu tidak berlaku. Adakah terdapat cara untuk mendapatkannya?

Terima kasih banyak-banyak terlebih dahulu.

P粉386318086
P粉386318086

membalas semua(1)
P粉715304239

Masalahnya ialah dengan kod. Terima kasih, @Michal Hynčica, anda memang betul. Ada bahagian seperti ini:

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

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

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

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

  ...
  $tx->commit();
}
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan