2017-02-15 6 views
1

私はMySQLとトランザクションを使用することを学んでおり、それはうまく動作していないようです。MySQLトランザクションはエラーで停止しません

私はいくつかのテストコード作成: "ttest2は" 意図的エラーであった

$db->query('START TRANSACTION;'); 
$db->query('DELETE FROM test1 WHERE id=4'); 
$db->query('DELETE FROM ttest2 WHERE id=5'); 
$res = $db->commit(); 

(テーブルが間違っている)を。

通常のクエリでは、$ resはfalseになり、クエリは失敗します。しかし、トランザクションを実行すると、最初の削除が発生し、2番目の削除は無視され、$ resはまだtrueです。トランザクションが正しく実行されない限り、トランザクションで問合せが発生することはありません。なぜそれが真実に戻り、PHPでエラーをキャッチするのですか?

+0

"トランザクションは、すべて正常に発生していない限り、クエリの実行を許可していないと考えました。" 「正しく」という言葉がなければ、あなたは正しいです。 – Johan

答えて

1

あなたはrollbackが欠落しています

これらのステートメントは、トランザクションの使用を制御提供:

のSTART TRANSACTIONをしたり、新しいトランザクションを開始BEGIN。

COMMITは現在のトランザクションをコミットし、その変更を永続的にします。

ROLLBACKは、現在のトランザクションをロールバックし、変更を取り消します。

SETオートコミットは、現在のセッションである のデフォルトの自動コミットモードを無効または有効にします。

関連する問題