2009-08-20 95 views
19

这是合法吗?多个mysql INSERT语句在一个查询中php

$string1= "INSERT INTO....;"; 
$string1 .= "INSERT INTO....;"; 
$string1 .= "INSERT INTO....;"; 
mysql_query($string1) or die(mysql_error()); 
+0

我解决我的问题有关使用此方法mysqli的[我的mysqli的PHP项目运行多个查询.multi-query。](http://us2.php.net/manual/en/mysqli.multi-query.php) – 2017-02-03 16:32:58

回答

0

不是。它们是单独的查询,必须这样调用。

33

不,mysql_query()一次只允许一个查询。

您可以插入多行这样的:

INSERT INTO table (col1, col2) 
VALUES (1, 2), (3, 4), (5, 6) 
+0

这个更好 - 它指定你将数据转储到的字段名是很重要的! – itsricky 2013-08-01 12:17:02

2

在一般情况下,这是有效的SQL,因为每个语句以分号结束,但PHP不允许你一次发送多个查询,以防止可能利用SQL注入攻击写得不好的脚本。

你仍然可以使用语法,如:

INSERT INTO foo VALUES ('a1', 'b1'), ('a2', 'b2'); 
10

从MySQL开发支持MySQL dev forum

INSERT INTO table (artist, album, track, length) 
VALUES 
("$artist", "$album", "$track1", "$length1"), 
("$artist", "$album", "$track2", "$length2"), 
("$artist", "$album", "$track3", "$length3"), 
("$artist", "$album", "$track4", "$length4"), 
("$artist", "$album", "$track5", "$length5"); 

所以插入进入正常一如既往:

  • 命名第一个表名我们要插入新行的地方,
  • fol通过命名圆括号中列名lowed(注意:不是需要,如果你想插入ALL列)
  • 其次VALUES键名,然后在圆括号中来,你要插入新行的值在上表中,其次
  • 通过COMMA然后另一对与在所提到的表中的新列的新值圆括号的上述
  • 和此重复N次,只要你需要插入的数据。

用ONE插入语句快乐地插入多个值。 :)一个函数和一个循环内

2

复制/粘贴例子(假设$ IDS是一个数组)

public function duplicateItem($ids) 
{ 
    if (isset($ids[0])){ //at least one item 

     $sqlQuery = "INSERT INTO items (item_id, content) VALUES "; 

     for($i=0; $i<count($ids); $i++) { 

       if ($i == count($ids)-1){ 
        $sqlQuery .= "(".$ids[$i][0].", '".$ids[$i][1]."');"; 
       }else{ 
        $sqlQuery .= "(".$ids[$i][0].", '".$ids[$i][1]."'),"; 
       } 

     } 

     mysql_query($sqlQuery) or die('Error, insert query failed: '.mysql_error()); 

    } 
} 
+0

最好避免串联。使用'implode()'。有关详细信息,请参阅此[答案](http://stackoverflow.com/a/780046/4040525)。 – 2015-12-29 16:55:35

+1

为什么在这种情况下使用implode()是有益的?在上面的问题中,我们有正常的SQL语句。在答案中,你指向他们谈论大量文本(例如1000个大文本插入),并且在那种情况下很好地避免串联。 – 2015-12-30 00:36:38

+0

我知道。它可以在这里使用连接。昨天我注意到了两个答案,并认为最好使用'implode()'作为一个经验法则。 – 2015-12-30 07:42:37

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