2016-11-09 43 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()); 
} 

這是有效的只有當所有列是字符串(因爲你在分配報價的值)。

另外,您的表名稱使用了錯誤的標識符限定符。

行情和蜱是兩種不同的動物。