在while循环中使用关联数组运行更新查询

时间:2016-11-09 19:53:32

标签: php mysql arrays

我的$updatearray包含各种数据($_POST数据),需要更新MySQL数据库中表格中的行。

$updatearray是一个关联数组。其中$ key是列名,$ value是需要覆盖旧数据的值。

例如:

array(2) {
  ["firstname"]=>
  string(6) "Peter"
  ["lastname"]=>
  string(6) "Griffin"
}

现在我正在寻找一种更新数据库的方法。我试着跟随:

foreach ($updatearray as $key => $value){
            $edit = $db->query("UPDATE 'users' SET $key='$value' WHERE userid='1'");

            if (!$edit) {
                die('Invalid query: ' . mysqli_error());
            }
        }

我不知道是否有更好的方法可以解决这个问题。如果这个问题在我的方式可以解决的话。但这就是我在这里的原因。

提前致谢,

麦克

2 个答案:

答案 0 :(得分:1)

您正在以正确的方式执行此操作,唯一错误的是您的SQL语法中存在错误。

请勿将您的表名放在引号中。

"UPDATE users SET $key='$value' WHERE userid='1'";

答案 1 :(得分:1)

以这种方式更新同一行的次数与要更新的列的次数相同。 您可以一次更新每一行,只将值分配给正确的set子句var

$set_clause  ='';
foreach ($updatearray as $key => $value){

   if ( $set_clause == '') {
    $set_clause = " SET " ;
   } else {
      $set_clause =  $set_clause . ' , ';
   }
    $set_clause = $set_clause . $key .  "  =  '". $value . "' "
}

$edit = $db->query("UPDATE users  " . $set_clause . " WHERE userid='1'");

if (!$edit) {
          die('Invalid query: ' . mysqli_error());
}

仅当所有列都是字符串时才有效(因为您在引用中指定了值)。

另外,您使用了错误的标识符限定符作为表名。

行情和蜱是两种不同的动物。