Php PDO语句是否自动转义?
PHP PDO语句是自动转义的,还是仅准备好的语句 例如,假设Php PDO语句是否自动转义?,php,mysql,pdo,Php,Mysql,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='$
$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\uUcode>函数提供额外的保护?它们没有转义。您可以在此处看到示例:
只有准备好的语句才能提供automagic转义,前提是您没有启用诸如magic quotes之类的丑陋功能。在准备语句时,只转义参数中的数据,而不转义SQL字符串中已经存在的任何数据
如果您想获得自动转义的好处,就必须准备一个语句并分别向其提供数据
$sth = $dbh->prepare("SELECT * FROM users WHERE username=? AND password=?");
$sth->execute(array($username, $password));
否则,您几乎得不到对mysqli\u query
和朋友的保护。(我甚至拒绝提及mysql\u query
,因为不再有自尊心的PHP程序员使用它了。哦,等等..该死。好吧,这是这里唯一提到的内容。)AFAIK它们不是,因为它怎么知道要转义查询字符串的哪一部分?否则它会意外地转义预期的引号。@DC\ux:请参阅我的更新答案,以获取对您添加内容的响应。:)