gpt4 book ai didi

php - PDO 语句是否自动转义?

转载 作者:行者123 更新时间:2023-11-29 01:14:01 24 4
gpt4 key购买 nike

PHP PDO 语句是自动转义的,还是只有准备好的语句?

例如,假设 $username$password 是用户输入。下面的代码是安全的,还是容易被注入(inject)?

$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_ 函数提供任何额外保护?

最佳答案

只有准备好的语句提供自动转义,假设你没有启用魔术引号之类的丑陋行为。并且只有参数中的数据被转义,而不是准备语句时 SQL 字符串中已有的任何数据。

如果您想要自动转义的好处,您必须准备一个语句并单独为其提供数据。

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

否则,您对 mysqli_query 和 friend 几乎没有任何保护。 (我什至拒绝提及 mysql_query,因为没有自尊的 PHP 程序员再使用它了。哦,等等..该死的。好吧,这是这里唯一提到它的地方。 )

关于php - PDO 语句是否自动转义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13548059/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com