在单个查询中将数组插入数据库表

时间:2010-05-08 07:07:23

标签: php mysql

我有一系列项目,如

[ITEM1,itmem2,项目3];

我必须在特定的userId:

中插入这些项目

最终结果看起来像这样

UserId ItemId

2   ||  item1 
2   ||  item2
2   ||  item3

目前我在php代码中循环遍历数组并逐个插入每个项目,例如

foreach($items as $item)
{
insert into items (UserId,ItemId) value  (2,$item);
}

是否可以在单个查询中插入所有条目。

4 个答案:

答案 0 :(得分:6)

是的,您的查询可能如下所示:

INSERT INTO items (UserId,ItemId)
VALUES
(2, 'item1'),
(2, 'item2'),
(2, 'item3');

您可以在PHP中构造该字符串。

答案 1 :(得分:2)

// Prepare the items to be inserted
foreach($items as $item)
{
   $sString .= '(2,' . $item.'),';
}

// Remove the last char comma from the built string
$sString = substr($sString,0,-1);

$sqlQuery = "INSERT INTO items (UserId,ItemId) VALUES" . $sString;
mysql_query($sqlQuery);

答案 2 :(得分:2)

Implode非常适合这个......

foreach($items as $item){
   $items[] = '(2,' . $item.')';
}

$q = "INSERT INTO items (userID, itemID) VALUES " . implode(', ', $items);
mysql_query($q);

请参阅 - http://php.net/manual/en/function.implode.php

答案 3 :(得分:1)

您可以预先构建查询:

$query = "";
foreach($items as $item)
{
  $query .= "insert into items (UserId,ItemId) value  (2,$item);";
}

如果用分号分隔,大多数数据库都允许您发出多个命令。