跳到问题底部的“我的代码”,直奔主题。
$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, ",") . ";";
问题:
如何编写执行多个 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。在 foreach 循环中使用LAST_INSERT_ID()+1
where1
替换为增量变量是否安全?如果来自不同用户的多个提交同时发生怎么办?