我有一个存储在变量$ contactid中的数组。我需要运行此查询以为数组中的每个contact_id插入一行。做这个的最好方式是什么?这是我需要运行的查询...
$contactid=$_POST['contact_id'];
$eventid=$_POST['event_id'];
$groupid=$_POST['group_id'];
mysql_query($query);
$query="INSERT INTO attendance (event_id,contact_id,group_id) VALUES ('$eventid','$contactid','$groupid')";
答案 0 :(得分:3)
使用foreach
循环。
$query = "INSERT INTO attendance (event_id,contact_id,group_id) VALUES ";
foreach($contactid as $value)
{
$query .= "('{$eventid}','{$value}','{$groupid}'),";
}
mysql_query(substr($query, 0, -1));
这里的想法是连接你的查询字符串,只对数据库进行1次查询,每个值集用逗号分隔
答案 1 :(得分:2)
由于还没有人说过,你实际上不能这样做:
$query = '
INSERT INTO [Table] ([Column List])
VALUES ([Value List 1]);
INSERT INTO [Table] ([Column List])
VALUES ([Value List 2]);
';
mysql_query($query);
因为这已被阻止以防止mysql_query代码中的sql注入。你不能在给定的查询参数中使用mysql_query分号。以下例外情况取自manual comments:
该文档声称“不支持多个查询”。
但是,似乎支持多个查询。你必须通过 标志65536作为mysql_connect的5参数(client_flags)。这个值 在/usr/include/mysql/mysql_com.h中定义:
#define CLIENT_MULTI_STATEMENTS(1UL<< 16)/ *启用/禁用多stmt支持* /
一次执行多个查询,mysql_query函数将会执行 仅为第一个查询返回结果。其他查询将是 也执行了,但你不会得到他们的结果。
然而,这是未记录和不受支持的行为,并且可以轻松打开SQL注入的代码。相反,你可以用mysql_query做什么
$query = '
INSERT INTO [Table] ([Column List])
VALUES ([Value List 1])
, ([Value List 2])
[...]
, ([Value List N])
';
mysql_query($query);
因此您实际上可以使用一个查询插入多行,并使用一个insert语句。在this answer中有一个代码示例,它不会连接到循环中的字符串,这比此线程中的建议更好。
然而,无视上述所有情况,你可能还是更好地使用准备好的声明,比如
$stmt->prepare("INSERT INTO mytbl (fld1, fld2, fld3, fld4) VALUES(?, ?, ?, ?)");
foreach($myarray as $row)
{
$stmt->bind_param('idsb', $row['fld1'], $row['fld2'], $row['fld3'], $row['fld4']);
$stmt->execute();
}
$stmt->close();
答案 2 :(得分:1)
使用以下内容。请注意,您不应再使用mysql_ *函数,并且您的代码可以注入。
for ($i = 0; $i < count($contactid); $i++) {
$query="INSERT INTO attendance (event_id,contact_id,group_id) VALUES ('$eventid','$contactid[$i]','$groupid')";
mysql_query($query);
}
答案 3 :(得分:0)
我不确定运行多个查询是最好的事情,因此不建议制作一个for循环,例如,运行数组的每个元素。我宁愿说,做一个递归循环,将新元素添加到字符串,然后传递给查询。如果您可以给我们一个简短的DB结构示例以及您希望它看起来如何(例如数组应该如何进入表格),我可以给您一个示例循环语法。
干杯!
答案 4 :(得分:0)
怎么样:
$contactIds = $_POST['contact_id'];
$eventIds = $_POST['event_id'];
$groupIds = $_POST['group_id'];
foreach($contactIds as $key => $value)
{
$currentContactId = $value;
$currentEventId = $eventIds[$key];
$currentGroupId = $groupIds[$key];
$query="INSERT INTO attendance (event_id,contact_id,group_id) VALUES ('$currentEventId','$currentContactId','$currentGroupId')";
mysql_query($query);
}
好吧,你可以重构一下,在一个查询中插入所有内容,但你明白了。