8

1つのクエリで2つのデータベーステーブルにデータを挿入する方法を探していました。1つが失敗しても、どちらも保存されません(孤立したデータは必要ありません)。BEGIN ... COMMITを使用してこれを実行する方法を示すStackOverflowの質問に遭遇しましたが、それは単に機能していません。

これが私が設定したクエリです:

$query = "BEGIN;
            INSERT INTO content_subpages (title, url_referer) VALUES ('$pagetitle','$url_referer');
            INSERT INTO ccm_main_menu (sub_item, sub_item_link,sub_item_sort_order) VALUES ('$pagetitle','$url_referer','$newsort');
            COMMIT;";
mysql_query($query) or die (mysql_error());

次のエラーが発生します。 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'INSERT INTO content_subpages (title, url_referer) VALUES ('TESTING','testing'); ' at line 2

BEGIN ... COMMITを使用するのはこれが初めてなので、何か間違ったことをしている可能性はありますが、私が言及したStack Overflowの質問に対する選択された回答(http:// stackoverflow.com/questions/12649706/mysql-insert-into-multiple-tables-in-same-query-with-begincommit)が、それでも機能しません。

BEGIN ... COMMITを使用せずに、「オールオアナッシング」の複数のINSERT結果を簡単に達成できれば、それは許容できる解決策になります。

前もって感謝します

4

4 に答える 4

7

行を複数の php ステートメントに分割してみてください。

$query = "BEGIN";
mysql_query($query) or die (mysql_error());
$query = "INSERT INTO content_subpages (title, url_referer) VALUES ('$pagetitle','$url_referer')";
mysql_query($query) or die (mysql_error());

$query = "INSERT INTO ccm_main_menu (sub_item, sub_item_link,sub_item_sort_order) VALUES ('$pagetitle','$url_referer','$newsort')";
mysql_query($query) or die (mysql_error())

$query = "COMMIT";
mysql_query($query) or die (mysql_error());
于 2012-10-01T18:58:27.487 に答える
3

multi_query代わりに使用する必要があります。

http://php.net/manual/en/mysqli.multi-query.php

于 2012-10-01T18:56:42.450 に答える
2

MyISAMはトランザクションではないため、MyISAMテーブルではなくInnoDBテーブルを使用していることを確認してください。

InnoDBテーブルを使用するには、テーブルを作成するときに、parenを閉じた後に。を追加しENGINE=InnoDBます。デフォルトでは、MyISAMが使用されます。

于 2012-10-01T19:01:17.093 に答える
0

試す:

 $dbh->beginTransaction();
 $query = "INSERT INTO content_subpages (title, url_referer) VALUES ('$pagetitle','$url_referer');
            INSERT INTO ccm_main_menu (sub_item, sub_item_link,sub_item_sort_order) VALUES ('$pagetitle','$url_referer','$newsort')";
 $dbh->exec($query);
 $dbh->commit();

ところで、サイモン・ジャーメインは良い点を得ました。トランザクションは InnoDB エンジンを使用してテーブルで動作します。

于 2012-10-01T19:08:22.420 に答える