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:山田」は入りません。
どうすればトランザクションが効くようになるのでしょうか?
No.1ベストアンサー
- 回答日時:
MySQL側の原因であればこの辺じゃないでしょうか。
・テーブルを作成時にInnoDBにしていない。
・DB接続時に自動コミットモードが有効になっている。
↓この辺が参考になるかも。
http://www.y2sunlight.com/ground/?MySQL4.1%2F9.M …
ご返答ありがとうございます。
テーブルをInnoDBにしてませんでした・・・
InnoDBにしてみたらできました。ありがとうございます。
あとROLLBACK;も使う必要がありました。
mysql_query($sqlstr) or $errStr= mysql_errno() . ": " . mysql_error(). "\n";
if($errStr){ mysql_query("ROLLBACK;"); }
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- MySQL テーブル作成です。どこかのスペルが間違っているか記号など スペースかな? 1 2022/10/01 05:08
- MySQL 参考書に従って入力したつもりでしたが、最後はエラーがでました。 1 2022/09/28 03:45
- PHP PHP MySQLに画像を直接保存 2 2022/06/05 11:50
- MySQL `picture` varchar(255) のコマンドで間違いないでしょうか? 1 2022/11/21 04:08
- MySQL MySQLのテーブル作成でハイフン - は使用できないのでしょうか? 2 2022/10/21 16:50
- MySQL エラー 1068 (42000): 複数の主キーが定義されていますエラー 2 2022/11/17 04:36
- MySQL 何にかが違うから エラーなんでしょうね! 2 2022/09/18 05:28
- MySQL あと、MySQLの文字コードはutf8 気になりますね 1 2022/12/01 07:22
- MySQL mysqlで INSERT と SELECTの用途は 1 2022/04/01 00:45
- その他(プログラミング・Web制作) mariadbでのエラー 1 2022/11/15 12:31
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
カウントして抽出するsqlをまと...
-
phpで複数のDBを使用した場合の...
-
MySQLが動かない(テーブルレコ...
-
MySQLのテーブルのデータ数のカ...
-
phpでmysql操作
-
接続ができません
-
SQLのVARCHARとVARCHAR2の違い
-
xamppのMySQLの文字化け
-
ブログサイトを作る時、mysqlは...
-
MYSQLで日本語が入力できない
-
参考書に従って入力したつもり...
-
他のPCにあるmysqlにDOSで接続。
-
ODP.NETのバージョン確認
-
「・」中点が入った文字列を条...
-
シャットダウン後にDBサーバに...
-
mysqlのmatch() against()で検...
-
ERROR 1045 (28000) (using pas...
-
MySQL のコマンドが実行出来ま...
-
RPMのmysqlとmysql-serverの違い
-
副問合せにLIKE文を使う方法は...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
複数行のクエリを、まとめて実...
-
phpで複数のDBを使用した場合の...
-
PHPでMySQLテーブルロック一覧取得
-
トランザクションが効かない
-
C言語で変数の内容をINSERTする...
-
MySQLのテーブルのデータ数のカ...
-
show databasesコマンドが効かない
-
データベースの選択エラー
-
the right syntax to use near ...
-
Warning: mysql_num_rows()
-
MySQLが動かない(テーブルレコ...
-
select文で見つからない場合の結果
-
緊急です。insert文が実行されない
-
MySQLのINSERT文で変数展開がで...
-
接続ができません
-
SQLのVARCHARとVARCHAR2の違い
-
副問合せにLIKE文を使う方法は...
-
MySQLカラム名は日本語と英数字...
-
ODP.NETのバージョン確認
-
旧filemakerで和暦(令和など)...
おすすめ情報