这是代码给我的问题-我试图用一个插入更新多个记录。这些值被放在一个数组中,并使用foreach准备了mysqli更新。但这行不通。只是给出了一个mysql关于更新语法的错误。
foreach($users as $user){
if(empty($course)) continue;
$query_string .= " SET group_id='$group_id' WHERE user_id='".$user."'; ";
}
$query_string = substr($query_string,0,-1);
$query = "UPDATE users" . $query_string;
$result = mysqli_query($dbc, $query) or trigger_error("Query: $query");
给出的错误是:你有一个错误在你的SQL语法;查看与MySQL服务器版本对应的手册,以便在"SET group_id='10' WHERE user_id='5'"附近使用正确的语法。
假设您有多个用户,您的查询将看起来像
UPDATE users SET ... SET ... SET ... SET ...
是不正确的。不能以这种方式对多行执行更新。要么做多个查询,每个更新一个学生,要么你必须建立一个巨大的case/if块来在单个查询中做到这一点。
你最好做多个查询,因为你可能会花费更多的时间来构建整体查询,而不是运行单个更新。
WHERE…IN
UPDATE foo SET bar = 0 WHERE baz IN (1,2,3,4,5,6)
(假设您将它们都设置为相同的组ID,这在提供的上下文中并不清楚)
试试下面的代码:
<?php
$queries = array();
foreach($users as $user){
if(empty($course)) continue;
$queries[] = "update users set group_id = '" . mysql_real_escape_string($group_id) . "' where user_id = '" . mysql_real_escape_string($user) . "'";
}
array_map('mysql_query', $queries);
?>
您的问题是您没有将不同的用户与;
分开。由于要将所有用户更新为具有相同的组(我不确定情况是否如此,否则情况会变得复杂得多),您可以简单地使用OR
扩展条件。您得到的查询将类似于以下内容:
UPDATE users SET group_id='42' WHERE user_id='1' OR user_id='2' OR user_id='3';
另一个解决方案是使用WHERE ... IN
。下面是一个例子:
UPDATE users SET group_id='42' WHERE user_id IN (1, 2, 3);