我想用多个行更新多行。 当我只更新1个输入字段时,它完全正常工作,但是当我更新不同的周和字段时查询失败。我不知道如何把这个代码放到一边。我已经在google和stackoverflow上搜索了但找不到符合我问题的内容。
这是我的代码
if(isset($_POST["opslaan"]))
{
unset($_POST["opslaan"]);
foreach($_POST as $input => $inner_arr)
{
foreach($inner_arr as $week => $value)
{
$update_query[] = $input." = '".$value."' WHERE week = ".$week;
}
}
$test = implode(", ", $update_query);
echo $test;
if(mysqli_query($conn, "UPDATE buitenklimaat SET ".$test))
{
header("location: dashboard.php?user=1&page=gewasregistratie");
echo "done";
}
else
{
echo "Failed !";
}
}
回声输出:
gem_buitentemperatuur_etmaal = '1' WHERE week = 1,
gem_buitentemperatuur_etmaal = '2' WHERE week = 2,
gem_buitentemperatuur_etmaal = '3' WHERE week = 3
答案 0 :(得分:2)
$query = "UPDATE buitenklimaat SET ";
foreach($_POST as $input => $inner_arr)
{
$query .= $input.' = CASE ';
foreach($inner_arr as $week => $value)
{
$query .= ' WHEN week = '.$week. ' THEN '.$value;
}
$query .= ' ELSE '.$input.' END , ';
}
$query = rtrim($query, ', ');
未经测试,您能看到$ query输出的内容吗?
更新:添加$ input_array
更新2:修剪最后一个逗号
更新3:重组循环
答案 1 :(得分:1)
您无法更新多个字段。
查看此问题SQL Statement with multiple SET's and WHERE's
中的答案另外,请不要忘记清理输入,直接从$ _POST获取值并将它们放入查询中是要求SQL Injection。
答案 2 :(得分:1)
你正在努力
update
set
where
where
where
这是错误的。
更新查询只能有一个where
子句。
Update
set //can have multiple set clause
where//only one where clause
现在您可以做的是:
foreach($_POST as $input => $inner_arr)
{
foreach($inner_arr as $week => $value)
{
$update_query[] = $input." = '".$value."' WHERE week = ".$week;
$test = implode(", ", $update_query);
if(mysqli_query($conn, "UPDATE buitenklimaat SET ".$test))
{
header("location: dashboard.php?user=1&page=gewasregistratie");
echo "done";
}
else
{
echo "Failed !";
}
}
}
答案 3 :(得分:1)
您创建的查询错误。执行多个更新的传统方法是在单个字符串中创建多个更新查询,并按照以下步骤执行它们,如下所示
UPDATE buitenklimaat SET Category_ID = 10 WHERE week = 2;
UPDATE buitenklimaat SET Category_ID = 9 WHERE week = 3;
UPDATE buitenklimaat SET Category_ID = 12 WHERE week = 4;
UPDATE buitenklimaat SET Category_ID = 11 WHERE week = 5;
或者Karl Rixon描述了另一种方式
UPDATE buitenklimaat
SET Category_ID = CASE week
WHEN 2 THEN 10
WHEN 3 THEN 9
WHEN 4 THEN 12
WHEN 5 THEN 11
ELSE Category_ID
END
您可以通过以下链接进一步了解它
答案 4 :(得分:0)
而不是WHERE
,您可以编写AND
并将WHERE
放在测试变量之前的UPDATE
字符串中,在那里您将拥有所有必需品