2012-09-19 95 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