2012-09-19 127 views
35

我想寫腳本,用函數來插入多個查詢。 讓我更好地解釋這一點。用一個查詢插入多行MySQL

我有一個quantity以html格式輸入。 和我有MySQL查詢插入registered user到表中。 所以我想我的函數插入此查詢「數量」次。

mysql_query("INSERT INTO `pxlot` (realname,email,address,phone,status,regtime,ip) 
VALUES ('$realname','$email','$address','$phone','0','$dateTime','$ip')") 
or die (mysql_error()); // Inserts the user. 

要插入此例如3次。 有什麼建議嗎?

+5

如果您在給定表格中多次重複一行相同的值,那麼您做錯了。您需要返回並重新評估您的架構設計。 –

+2

順便說一下mysql_ *已被棄用 –

回答

77
INSERT INTO table (a,b) VALUES (1,2), (2,3), (3,4); 

http://dev.mysql.com/doc/refman/5.5/en/insert.html

+5

聲明中列值列表的限制是多少?我的意思是有多少個元組'(1,2)'我們可以傳遞給一個'INSERT'語句。 – PythonDev

+6

@akshay,我真的不知道答案,我懷疑這個限制不在於元組的數量,而在於由'max_allowed_pa​​cket' mysql系統變量控制的語句大小。我認爲默認值是1MB,協議最大1GB。 –

18

這裏有幾個方法可以做到這一點

INSERT INTO pxlot (realname,email,address,phone,status,regtime,ip) 
select '$realname','$email','$address','$phone','0','$dateTime','$ip' 
from SOMETABLEWITHTONSOFROWS LIMIT 3; 

INSERT INTO pxlot (realname,email,address,phone,status,regtime,ip) 
select '$realname','$email','$address','$phone','0','$dateTime','$ip' 
union all select '$realname','$email','$address','$phone','0','$dateTime','$ip' 
union all select '$realname','$email','$address','$phone','0','$dateTime','$ip' 

INSERT INTO pxlot (realname,email,address,phone,status,regtime,ip) 
values ('$realname','$email','$address','$phone','0','$dateTime','$ip') 
,('$realname','$email','$address','$phone','0','$dateTime','$ip') 
,('$realname','$email','$address','$phone','0','$dateTime','$ip') 
13

在大多數情況下,使用一個Insert語句插入多個記錄比在PHP中使用for/foreach循環插入記錄要快得多。

我們假設$ column1和$ column2是由html表單發佈的具有相同大小的數組。

你可以這樣創建查詢:

<?php 
    $query = 'INSERT INTO TABLE (`column1`, `column2`) VALUES '; 
    $query_parts = array(); 
    for($x=0; $x<count($column1); $x++){ 
     $query_parts[] = "('" . $column1[$x] . "', '" . $column2[$x] . "')"; 
    } 
    echo $query .= implode(',', $query_parts); 
?> 

如果數據發佈了兩個記錄的查詢將變爲:

INSERT INTO TABLE(column1column2)VALUES( '數據' ,'data'),('data','data')

0

如果您想要插入多個值,不同的後期值,但要插入相同的表格,然後簡單地使用:

mysql_query("INSERT INTO `table` (a,b,c,d,e,f,g) VALUES 
('$a','$b','$c','$d','$e','$f','$g'), 
('$a','$b','$c','$d','$e','$f','$g'), 
('$a','$b','$c','$d','$e','$f','$g')") 
or die (mysql_error()); // Inserts 3 times in 3 different rows