5

我需要有关将值插入不同行的单个列的方法的帮助。

现在,我有一个内爆数组,它给了我这样的值:

('12', '13', '14')

这些数字是我希望插入数据库的新 ID。
我用来内爆数组的代码是这样的:

$combi = "('".implode("', '",$box)."')"; // 其中 $box 是初始数组

我打算使用的查询卡在这里:

mysql_query(" INSERT INTO studentcoursedetails ( studentID)

一种选择是重复这个,但我不能,因为数组会循环;可能有 3 个 ID,可能有 20 个
。循环似乎不对。任何帮助,将不胜感激。

4

6 回答 6

3

要将多个值插入表中,您应该使用 (value1), (value2) 语法:

$combi = "('".implode("'), ('",$box)."')";

PS:此功能称为行值构造函数,从 SQL-92 开始可用

于 2011-01-24T12:58:32.837 回答
2

你能不能做这样的事情:

for($x = 0; $x < count($box); $x++)
{
  mysql_query("INSERT INTO studentcoursedetails (studentID) VALUES ($box[$x]);
}

这将直接在您的数组上工作,为 $box 中的每个值插入一个新行,并且还可以防止将数组内爆为逗号分隔的字符串

将 id 存储为逗号分隔的字符串最初可能看起来像一个简单的模型,但从长远来看,这会给您在尝试使用非规范化数据库时带来无穷无尽的麻烦。

于 2011-01-24T12:58:09.223 回答
2

某些风格的 sql 允许复合插入:

insert into studentcoursedetails (studentid) values
   (1),
   (2),
   (3),
于 2011-01-24T12:59:22.977 回答
2

如果您使用的是 MySQL,您可以在一个句子中插入多个值:

sql> insert into studentcoursedetails (studentID)
   > values (('12'), ('13'), ('14'));

因此,您只需要在 PHP 中构建该字符串即可。

于 2011-01-24T13:00:31.587 回答
1

您仍然可以通过 implode 创建语句。只是不要使用价值;改用 SELECT

$combi = " ".implode(" UNION ALL SELECT ",$box)." "; // Where $box is the initial array
mysql_query("INSERT INTO studentcoursedetails (studentID) SELECT " . $combi)

SELECT .. union可以跨许多 dbms 移植。

请注意 ID - 如果它们是数字,请不要引用它们。

于 2011-01-24T12:59:00.903 回答
0

检查是否存在将对数组参数进行操作的 mysql_query 函数的变体。

于 2011-01-24T12:59:04.193 回答