【问题标题】:PHP -> PDO Update Function using Foreach array mergePHP -> PDO 更新函数使用 Foreach 数组合并
【发布时间】:2013-07-22 16:31:01
【问题描述】:

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

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

【问题讨论】:

  • SQL 注入警报!

标签: php arrays pdo sql-update


【解决方案1】:

改变这个:

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

到这里:

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

然后只在 $sql 上使用 rtrim。

【讨论】:

    【解决方案2】:

    问题出在$array .= array(':$columnname' => $_POST[$columnname],);

    你有一个, 不是字面值的部分。改成这样

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

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

    【讨论】:

      【解决方案3】:

      而不是使用

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

      并在结果上应用rtrim,我建议使用更简单且故障安全的方法:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-02-09
        • 2013-08-27
        • 2016-09-21
        • 1970-01-01
        • 1970-01-01
        • 2013-10-08
        • 2020-03-23
        相关资源
        最近更新 更多