2013-07-22 44 views
-1

下面的代碼應該檢查表的列名。然後檢查相應的變量是否已經是$ _POST,並且是否已經將它添加到$ SQL。我相信這個數組有一個問題,它包含一系列數組,但我不知道如何去定義它。PHP - >使用Foreach數組合並的PDO更新函數

$where = $_POST['where']; 
    $is = $_POST['is']; 
    $table = $_POST['table']; 
    $sql = "UPDATE $table SET"; 
    $array = array(); 

    $columnnames = columnnames('blog'); 
    foreach ($columnnames as $columnname){ 

     if($_POST[$columnname]){ 
      $sql .= " $columnname = :$columnname,"; 
      $array .= array(':$columnname' => $_POST[$columnname],); 
     } 

    } 
    $sql = rtrim($sql,','); 
    $array = rtrim($array,','); 

    $sql .= " WHERE $where = '$is'"; 
    $q = $rikdb->prepare($sql); 
    $q->execute($array); 

爲了便於理解,請除$columnnames = columnnames('blog');之外的其他作品。

+0

** SQL注入警報!** –

回答

0

更改此:

$array .= array(':$columnname' => $_POST[$columnname],); 

這樣:

$array[':$columnname'] = $_POST[$columnname]; 

和使用RTRIM只在$ SQL後。

0

的問題是在這裏$array .= array(':$columnname' => $_POST[$columnname],);

你是不是字面價值的,一部分。改變它像

$array .= array(':$columnname' => $_POST[$columnname] . ","); 

您還可以將列名和值添加到一個數組和implode(",", $array),這樣你就不必使用rtrim

0

而不是使用

$array .= array(':$columnname' => $_POST[$columnname],); 

和對結果應用rtrim,我建議更容易和故障安全的方法:

$array[':$columnname'] = $_POST[$columnname];