みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

トランザクションについて教えてください

PHPとMysqlを利用しています。MySQL4.1.18です。

同じテーブルに2つ以上の値をINSERTする場合、
1つでもエラーがあればロールバックさせるということはできますでしょうか。

あらかじめ「id=1」の値を登録しておき、この場合1つめがエラーになるので
2つめも実行されないでほしいのですが、実行されてしまいます。
テーブルのタイプはInnoDBにしています。

どうぞよろしくお願いします。

以下を参考に作成しました。
http://oshiete.nikkeibp.co.jp/qa3065237.html

$sql = "begin";
$rst = mysql_query($sql, $con);
//1つめ
$sql= "INSERT INTO T_test(id,name)values('1','山田')";
$rst = mysql_query($sql, $con);
if(!$rst){$err="err";}
//2つめ
$sql= "INSERT INTO T_test(id,name)values('2','鈴木')";
$rst = mysql_query($sql, $con);
if(!$rst){$err="err";}

$sql = "commit";
$rst = mysql_query($sql, $con);

if($err){
$sql = "rollback";
$rst = mysql_query($sql, $con);
}

投稿日時 - 2007-06-15 09:40:16

QNo.3086273

すぐに回答ほしいです

質問者が選んだベストアンサー

ROLLBACKより前にCOMMITを実行しているように見えますが…。

エラーがなければCOMMIT、エラーがあればROLLBACKを実行するようにロジックを変える必要があるのではないですか?

投稿日時 - 2007-06-15 12:46:39

お礼

Cerenさんありがとうございます。

初めてトランザクション処理をしたのでよくわかっていませんでした。
commitの前にrollbackを記述したところうまくいきました。
ありがとうございました。

投稿日時 - 2007-06-15 15:31:37

ANo.1

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問