0

1 つのフォームから 2 つのテーブルに挿入するにはどうすればよいですか?

テーブルに送信したい: gallery と cat.

これは、ギャラリーに送信するためのコードです。cat テーブルに情報を同時に追加するにはどうすればよいですか?

$sql = 'INSERT INTO gallery (image_url, image_name, image_description)
VALUES (?, ?, ?)';


$stmt = $conn->stmt_init();
if ($stmt->prepare($sql)) {

$stmt->bind_param('sss', $_FILES['upload']['name'], $_POST['image_name'],     
$_POST['image_description']);
$OK = $stmt->execute();

}

私はこれで何をしますか:

$sql_2 = 'INSERT INTO cat (cat_name) VALUES (?)';
4

3 に答える 3

1

上記のコードの後、新しいステートメントを初期化し、バインドして実行します。既存の接続を使用できます ( $conn)。$sqlおよび変数は、最初のテーブルに挿入することで既にその$stmt役割を果たしているため、2 番目の挿入のためにそれらをリセットするだけです。

... your code as posted above, followed by:

$sql = 'INSERT INTO cat (cat_name) VALUES (?)';
$stmt = $conn->stmt_init();
if ($stmt->prepare($sql)) {
  $stmt->bind_param('s', put your cat_name value here);
  $OK = $stmt->execute();
}

覚えておくべき重要なことは、2 番目の挿入は最初の挿入とまったく同じであるということです。つまり、初期化、バインド、および実行する必要があります。

于 2013-03-27T05:07:24.130 に答える
0

ここに示すように、トランザクションを使用する必要があります。

于 2013-03-27T04:36:38.227 に答える
-1

いいえ、1 つの MySQL コマンドで複数のテーブルに挿入することはできません。ただし、トランザクションは使用できます。

BEGIN INSERT INTO ユーザー (ユーザー名、パスワード) VALUES('test', 'test') INSERT INTO プロファイル (ユーザー ID、略歴、ホームページ) VALUES(LAST_INSERT_ID(),'Hello world!', ' http://www.stackoverflow. com '); 専念;

LAST_INSERT_ID を見て、自動インクリメント値を再利用してください。編集: あなたは、「何度もそれを理解しようとしても、まだ機能しません。生成されたばかりの ID を $var に入れて、その $var をすべての MySQL コマンドに入れることはできませんか?」と言いました。

詳しく説明しましょう: ここには 3 つの方法があります。

1/ 上記のコードです。これはすべて MySQL で行われ、2 番目のステートメントの LAST_INSERT_ID は、最初のステートメントで挿入された autoincrement-column の値になります。

残念ながら、2 番目のステートメント自体が自動インクリメント列を含むテーブルに行を挿入すると、LAST_INSERT_ID はテーブル 1 ではなくテーブル 2 の ID に更新されます。後でテーブル 1 の ID が必要な場合は、保存する必要があります。それを変数に入れます。これにより、方法 2 と 3 に進みます。

2/ MySQL 変数に LAST_INSERT_ID を格納します。

A/ INSERT B/ SELECT LAST_INSERT_ID into @mysql_variable_here C/ INSERT INTO table2 (@mysql_variable_here D/ INSERT INTO table3 (@mysql_variable_here ...

3/ LAST_INSERT_ID を php 変数 (または選択したデータベースに接続できる任意の言語) に格納します。

A/ INSERT B/ 言語を使用して、MySQL でそのリテラル ステートメントを実行するか、たとえば php の mysql_insert_id() を使用して LAST_INSERT_ID を取得します C/ INSERT ()

于 2013-03-27T04:51:27.363 に答える