私はphpBBを使用していますが、このコードは期待どおりに動作していません。単にphpBB sql_transaction
関数を使用してSQLトランザクションを開始し、コミットします。しかし、例外は半分の方法でスローされ、同じ関数を使用してロールバックを発行する必要があります。phpBB SQLトランザクション機能が動作しません
ただし、ロールバックは発生しません。クエリ1と2が有効になり、ロールバックすることができません。
documentationには、SQLエラーがあると自動的にロールバックが発行されると記載されていますが、タイムアウトなどのPHPエラーがある場合はロールバックしようとしています。
私はMySQL 5.7、phpBB 3.0.11、およびphp 5.6を使用しています。
誰かが問題を指摘できますか?
$db->sql_transaction('begin');
try {
$sql = 'UPDATE aaa_temp SET method = "a" WHERE id = 1';
$db->sql_query($sql);
$sql = 'UPDATE aaa_temp SET method = "b" WHERE id = 2';
$db->sql_query($sql);
throw new Exception('OMG TOTAL ERROR');
$sql = 'UPDATE aaa_temp SET method = "c" WHERE id = 3';
$db->sql_query($sql);
} catch (Exception $ex) {
$db->sql_transaction('rollback');
trigger_error($ex->getMessage(), E_USER_ERROR);
}
$db->sql_transaction('commit');
ありがとうございます!本当にシンプルで愚かなものになる必要があることは分かっていますが、詳細が必要な場合は教えてください。
EDIT:明らかに、私はMySQLのSQLトランザクションについて話しています。
「新しい例外をスローする」の前に2つのUPDATEクエリが実行されている理由は何ですか? – Webeng
私は彼らが処刑されていることを知っていますが、彼らは取引の一部でなければなりません。スローされた例外があり、ロールバックが発行されたときに、彼らはなぜ成功していますか?これらの2つの更新をロールバックしてはいけませんか? –