在MySQL中更新多行

时间:2010-07-07 21:48:12

标签: php mysql

我试图通过这样做来更新MySQL数据库中一个表中的多个行。它不起作用。

$query = "UPDATE cart SET cart_qty='300' WHERE cart_id = '21';
          UPDATE cart SET cart_qty='200' WHERE cart_id = '23';
          UPDATE cart SET cart_qty='100' WHERE cart_id = '24';";
mysql_query($query,$link);// $link is specified above

任何人都知道这有什么问题。

5 个答案:

答案 0 :(得分:5)

来自PHP documentation

  

mysql_query()发送唯一查询(不支持多个查询

;分隔SQL语句,因此如果要继续使用mysql_query函数,则需要分离查询...

答案 1 :(得分:3)

mysql_query无法使用多个查询。

最简单的方法是单独运行它们。我相信你可以做多查询,但我还没有尝试过。

$updateArray = array(21=>300,23=>200,24=>100);
foreach($updateArray as $id=>$value)
{
    $query = "UPDATE cart SET cart_qty='$value' WHERE cart_id = '$id'";
    mysql_query($query,$link);// $link is specified above
}

这将接受ID及其相应购物车价值的组合。但是,它会构建查询并执行它。然后,数组可以来自各种来源(来自另一个查询的结果,表单输入,或者,如本例中的硬编码值)

更新

如果你真的需要一个一个地执行,那么就是关于多个查询的PHP信息:

mysqli::multi_query

答案 2 :(得分:2)

你可以这样做:

UPDATE table
  SET col1 = CASE id
    WHEN id1 THEN id1_v1,
    WHEN id2 THEN id2_v1
  END
  col2 = CASE id
    WHEN id1 THEN id1_v2,
    WHEN id2 THEN id2_v2
  END
  WHERE id IN (id1, id2)

此示例显示更新两个不同行中的两个不同列,以便您可以通过将这样的查询汇总在一起来将其扩展为更多行和列。可能存在一些扩展问题,使得case语句不适合于大量的行。

答案 3 :(得分:0)

您需要将它们作为单独的查询发送。为什么不将查询作为字符串添加到数组中,然后迭代遍历发送每个查询的数组?

同时检查this thread for another idea

答案 4 :(得分:0)

这不是最好的方法..但是如果你需要做多个查询,你可以使用像...这样的东西。

function multiQuery($sql) 
{
  $query_arr  =  explode(';', $sql);

  foreach ($query_arr as $query)
  {
    mysql_query($query);
  }
}

辅助查询的另一个例子

function build_sql_update($table, $data, $where)
{

  $sql  =  '';

  foreach($data as $field => $item)
  {
    $sql .=  "`$table`.`$field` = '".mysql_real_escape_string($item)."',";
  }

  // remove trailing ,
  $sql  =  rtrim($sql, ',');

  return 'UPDATE `' . $table .'` SET '.$sql . ' WHERE ' .$where;
}

echo build_sql_update('cart', array('cart_qty' => 1), 'cart_id=21');