MySQL的更新修正了一个查询
这是给我的问题的代码两行 - 我试图用一个插入更新多条记录。值被放在一个数组中,并使用foreach我已经准备好mysqli更新。但它不起作用。只是提供有关更新语法的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''附近使用正确的语法。我认为这是';'在mysqli不接受的中间。
回答:
如何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);
?>
回答:
假设你有一个以上的用户,您的查询将看起来像
UPDATE users SET ... SET ... SET ... SET ...
这是不正确。你不能以这种方式更新多行。要么执行多个查询,每个查询都要更新一个学生,否则您必须构建一个巨大的case/if块来在单个查询中执行此操作。
你会更好做了多个查询,你可能会花更多的时间构建单片查询比它会带运行单个更新。
回答:
你的问题是你不要将不同的用户与;
分开。既然你要更新所有用户都具有相同的组(我不知道这样的情况下,否则会得到更多复杂的),你可以简单地扩展标准与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);
以上是 MySQL的更新修正了一个查询 的全部内容, 来源链接: utcz.com/qa/265443.html