MySQL Update修复两行一个查询

时间:2011-10-18 16:29:59

标签: php mysql

这是给我问题的代码 - 我试图用一个插件更新多个记录。这些值放在一个数组中,并使用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不接受的中间。

4 个答案:

答案 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);