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ランキング
-
複数行のクエリを、まとめて実...
-
PHPでMySQLテーブルロック一覧取得
-
接続ができません
-
SQLのVARCHARとVARCHAR2の違い
-
プライマリーキーの昇順でソー...
-
like句を使って日本語を検索す...
-
Microsoftストアのソフトは特別...
-
泣きそうです>< PHPでSQLite3が...
-
データベースのフィールドのデ...
-
●MySQLが急に停止する事につい...
-
Float型の時の計算結果がおかしい
-
VBAで変数内に保持された二次配...
-
4.0.14から4.0.26にDBを移行す...
-
PHP+MySQLから結果セット取得後...
-
MySQLのLOAD DATA INFILEコマン...
-
クエリー実行中に強制終了した場合
-
LinuxのMySQLのrootパスワード...
-
副問合せにLIKE文を使う方法は...
-
ERROR 1045 (28000) (using pas...
-
旧filemakerで和暦(令和など)...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
phpで複数のDBを使用した場合の...
-
複数行のクエリを、まとめて実...
-
PHPでMySQLテーブルロック一覧取得
-
C言語で変数の内容をINSERTする...
-
select文で見つからない場合の結果
-
データベースの選択エラー
-
トランザクションが効かない
-
MySQLのテーブルのデータ数のカ...
-
show databasesコマンドが効かない
-
緊急です。insert文が実行されない
-
接続ができません
-
SQLのVARCHARとVARCHAR2の違い
-
副問合せにLIKE文を使う方法は...
-
ODP.NETのバージョン確認
-
ERROR 1045 (28000) (using pas...
-
like句を使って日本語を検索す...
-
VBAで変数内に保持された二次配...
-
MySQLカラム名は日本語と英数字...
-
INT型は金額の型に使用するべき...
-
プライマリーキーの昇順でソー...
おすすめ情報