PDO语句是否自动转义?

PHP PDO语句是自动转义还是只准备语句?

例如,假设$username$password是用户输入。 下面的代码是否安全,还是易受注入?

$dbh = new PDO("mysql:host=localhost;dbname=mydb", $my_mysql_username, $my_mysql_password);
$sth = $dbh->query("SELECT * FROM users WHERE username='$username' AND password='$password'");
$result = $sth->fetch();
if(!$result){
    $dbh->exec("INSERT INTO users (username, password) VALUES ('$username', '$password')");
}

(上面的代码纯粹是假设的,仅用于举例目的。)

如果它们不能自动转义,那么在这种情况下,PDO是否会为mysql_函数提供额外的保护?


只有准备好的语句提供了automagic转义,假设你没有像启用魔术引号那样的丑陋。 并且只有参数中的数据才会被转义,而不是在准备语句时已经存在于SQL字符串中的任何数据。

如果您想要自动转义的好处,您必须准备一份声明并分别为其提供数据。

$sth = $dbh->prepare("SELECT * FROM users WHERE username=? AND password=?");
$sth->execute(array($username, $password));

否则,你对mysqli_query和朋友几乎没有任何保护。 (我拒绝提及mysql_query ,因为没有自尊心的PHP程序员再次使用它了,噢,等等。当然,这是唯一提到它的地方。)


他们没有逃脱。 你可以在这里看到例子:

http://www.phptherightway.com/#pdo

链接地址: http://www.djcxy.com/p/93757.html

上一篇: Are PDO statements automatically escaped?

下一篇: Are PDO prepared statements enough