PHP->;使用Foreach数组合并的PDO更新函数


PHP -> PDO Update Function using Foreach array merge

以下代码用于检查表的列名。然后检查相应的变量是否为$_POST,以及是否已将其添加到$SQL中。我相信包含一系列数组的数组有问题,但我不知道如何dix它。

$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');的工作原理。

更改此项:

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

到此:

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

之后只在$sql上使用rtrim。

这里的问题是$array .= array(':$columnname' => $_POST[$columnname],);

值的,部分不是文字。把它改成

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

您还可以将列名和值添加到数组和implode(",", $array)中,这样就不必使用rtrim

而不是使用

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

并将rtrim应用于结果,我建议使用更简单、安全的方法:

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