从pdo预处理语句

时间:2017-08-10 08:32:51

标签: php mysql pdo prepared-statement

我有一些工作代码可以解决在pdo预处理语句中手动将每个变量绑定到其参数的繁琐。我循环遍历$_POST数组,并根据html表单中的名称属性动态地将变量绑定到params。

我的问题是,这样做是否安全?我打开SQL注入吗?

这是我的代码 -

if( !empty($_POST) ){
    try {
        $conn = new PDO("mysql:host=$servername;dbname=$dbname;charset=utf8", $username, $password);
        $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

        $stmt = $conn->prepare("INSERT INTO planes (name, description) VALUES(:name, :description)");

        foreach($_POST as $key => &$value){
            $key = ':'.$key;
            $stmt->bindParam($key, $value);
        }

        $stmt->execute();
    }
    catch(PDOException $e) {
        echo "Error: " . $e->getMessage();
    }
    $conn = null;
}

1 个答案:

答案 0 :(得分:1)

是的,这很安全。如果您使用参数化查询,则不会受到注入攻击。

话虽如此,似乎你在这里重新发明轮子,这通常不是正确的做事方式。然而;这超出了你的问题的范围。

Also please see this very similar question接受的答案可以这样说:

  

使用预准备语句和参数化查询。这些是由数据库服务器与任何参数分开发送和解析的SQL语句。这样攻击者就无法注入恶意SQL。