跳到問題底部的「我的代碼」以直接找到要點。對於每行,使用LAST_INSERT_ROW的單個MySQL多行INSERT的PHP?
$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);
我的代碼:
這是一個簡化版本,我的代碼...
什麼是安全產生$row_ID_from_first_insert
方式?
根據我的理解,在查詢字符串中使用LAST_INSERT_ID()
將不起作用,因爲當多個行插入一個查詢字符串時,它只會返回第一個插入的行ID。是否可以安全使用LAST_INSERT_ID()+1
,其中1
在foreach循環中被一個增量變量替換?如果多個提交同時發生在不同的用戶上,該怎麼辦?
請不要在新的應用程序中使用'mysql_query'。正確使用非常困難,並且可能導致[SQL注入漏洞](http://bobby-tables.com/php)出現嚴重的**問題。學習PDO或'mysqli'只需要很短的時間,這使得編寫適當的,安全的SQL接口代碼變得非常容易。 – tadman