プロが教える店舗&オフィスのセキュリティ対策術

PHPでMySQLをやっています。
異なる2つのテーブルに同時にinsertをしようと思い、transactionを使って
片方がエラーならどちらにもinsertしないこと期待したのですが、
どうも効いてないみたいなんです・・・

mysql_query("begin transaction;") or $errStr= mysql_errno() . ": " . mysql_error(). "\n";

$sqlstr = "INSERT INTO table1 (id, name) VALUES ("aaaa", "山田");";
mysql_query($sqlstr) or $errStr= mysql_errno() . ": " . mysql_error(). "\n";
$sqlstr = "INSERT INTO table2 (id, name) VALUES ("bbbb", "佐藤");";
mysql_query($sqlstr) or $errStr= mysql_errno() . ": " . mysql_error(). "\n";

mysql_query("commit transaction;") or $errStr= mysql_errno() . ": " . mysql_error(). "\n";

※table1には既に「id:aaaa name:鈴木」が入っています

を実行して重複エラー
「1062: Duplicate entry 'aaaa' for key 1 」
が出たのですが、table2には「id:bbbb name:佐藤」が入ってしまいます。
もちろんtable1には「id:aaaa name:山田」は入りません。
どうすればトランザクションが効くようになるのでしょうか?

A 回答 (1件)

MySQL側の原因であればこの辺じゃないでしょうか。



・テーブルを作成時にInnoDBにしていない。
・DB接続時に自動コミットモードが有効になっている。

↓この辺が参考になるかも。
http://www.y2sunlight.com/ground/?MySQL4.1%2F9.M …
    • good
    • 0
この回答へのお礼

ご返答ありがとうございます。
テーブルをInnoDBにしてませんでした・・・
InnoDBにしてみたらできました。ありがとうございます。
あとROLLBACK;も使う必要がありました。

mysql_query($sqlstr) or $errStr= mysql_errno() . ": " . mysql_error(). "\n";
if($errStr){ mysql_query("ROLLBACK;"); }

お礼日時:2007/06/08 17:26

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!