PHP使用多个WHERES更新多行不起作用

时间:2014-01-20 10:03:42

标签: php arrays multidimensional-array mysqli sql-update

我想用多个行更新多行。 当我只更新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

5 个答案:

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

您可以通过以下链接进一步了解它

来源:http://www.karlrixon.co.uk/writing/update-multiple-rows-with-different-values-and-a-single-sql-query/

答案 4 :(得分:0)

而不是WHERE,您可以编写AND并将WHERE放在测试变量之前的UPDATE字符串中,在那里您将拥有所有必需品