2016-11-09 62 views
-1

我的$updatearray包含各种数据($_POST数据),并需要更新我的MySQL数据库中的表中的一行。运行更新查询while循环与关联数组

$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()); 
      } 
     } 

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

由于提前,

迈克

+0

是的,有一个更好的办法。您应该防止SQL注入并使用预准备语句。 'db'类是什么样子,你正在使用? –

+0

检查查询中的错误最有可能避免了这个问题。 –

回答

1

你正在做正确的方式,唯一错的事情是,你有你的SQL语法错误。

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

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

通过这种方式,您可以更新与要更新的列相同的行数。 你可以一次更新每行只值分配给一组适当的条款变种

$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()); 
} 

这是有效的只有当所有列是字符串(因为你在分配报价的值)。

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

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