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