我试图通过这样做来更新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
任何人都知道这有什么问题。
答案 0 :(得分:5)
答案 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信息:
答案 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)
您需要将它们作为单独的查询发送。为什么不将查询作为字符串添加到数组中,然后迭代遍历发送每个查询的数组?
答案 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');