Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php PDO语句是否自动转义?_Php_Mysql_Pdo - Fatal编程技术网

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='$

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\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:请参阅我的更新答案,以获取对您添加内容的响应。:)