这是给我问题的代码 - 我试图用一个插件更新多个记录。这些值放在一个数组中,并使用foreach我准备了mysqli更新。但它不起作用。只是给出了有关更新语法的MySqli错误。
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'WHERERE user_id ='5''附近使用正确的语法。我认为这是';'在mysqli不接受的中间。
答案 0 :(得分:1)
假设您有多个用户,您的查询将如下所示
UPDATE users SET ... SET ... SET ... SET ...
这是不正确的。您无法以这种方式对多行进行更新。要么做多个查询,每个更新一个学生,要么你必须构建一个巨大的case / if块来在一个查询中执行此操作。
您最好不要进行多个查询,因为您可能会花费更多时间来构建单个查询,而不是运行单个更新。
答案 1 :(得分:0)
试试这段代码:
<?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);
?>
答案 2 :(得分:0)
WHERE ... IN
怎么样?UPDATE foo SET bar = 0 WHERE baz IN (1,2,3,4,5,6)
(假设您将它们全部设置为相同的组ID,这在提供的上下文中不明确)
答案 3 :(得分:0)
您的问题是,您不会将不同的用户与;
分开。由于您要更新所有用户以拥有相同的组(我不确定是这种情况,否则会变得更加复杂)您只需使用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);