質問の下部にある「マイコード」にスキップして、ポイントに直行してください。
$con = mysql_connect('localhost', 'mysql_user', 'mysql_password');
一般的な例:
このように、単一mysql_query
の 内で複数のクエリ文字列を実行できます...
mysql_query("
INSERT INTO table_one (a,b,c) VALUES (1,2,3);
INSERT INTO table_two (x,y,z) VALUES (7,8,'a text value');
", $con);
このように、各クエリ文字列に複数の行を追加できます...
mysql_query("
INSERT INTO table_one (a,b,c) VALUES (1,2,3), (2,3,1), (3,1,2);
INSERT INTO table_two (x,y,z) VALUES (7,8,9), (8,9,7), (9,7,8);
", $con);
このような値の配列で...
$array(
[0] => array(1,2,3),
[1] => array(2,'text',1),
[2] => array(3,1,2)
);
...クエリ文字列は、次のようにループを使用して動的に作成できます...
$a = "INSERT INTO table_one (a,b,c) VALUES ";
foreach($array as $val){
$a .= "(". implode(",",$val) ."),";
}
$a = trim($a, ",") . ";";
質問:
2 番目のクエリ文字列によって挿入された各行が最初のクエリ文字列によって挿入された対応する行を参照できるように、複数の INSERT クエリ文字列をそれぞれ複数の行で実行する単一の MySQL クエリを作成する方法。したがって$var
、このスニペットでは、最初の INSERT の auto_increment 行 ID に対応します。
mysql_query("
INSERT INTO table_one (a,b,c) VALUES (1,2,3), (2,3,1), (3,1,2);
INSERT INTO table_two (x,y,z) VALUES ($var,8,9), ($var,9,7), ($var,7,8);
", $con);
私のコード:
これは私のコードの簡略化されたバージョンです...
$q1 = "INSERT INTO `table_one` (t1c1,t1c2) VALUES ";
$q2 = "INSERT INTO `table_two` (t2c1,t2c2,t2c3) VALUES ";
foreach($array as $item){
$q1 .= "('". $item ."','blah'),";
$q2 .= "('". $row_ID_from_first_insert ."','something','whatever'),";
}
$q1 = trim($q1,",") .";";
$q2 = trim($q2,",") .";";
$q = $q1.$q2;
mysql_query($q, $this->connect);
生成する安全な方法は何$row_ID_from_first_insert
ですか?
私の理解LAST_INSERT_ID()
では、単一のクエリ文字列で複数の行が挿入されると、最初に挿入された行 ID のみが返されるため、クエリ文字列での使用は機能しません。LAST_INSERT_ID()+1
foreach ループで where1
をインクリメンタル変数に置き換えても安全ですか? 異なるユーザーから同時に複数の送信が行われた場合はどうなりますか?