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

回到顶部