SQL注入好奇

SQL注入好奇,sql,sql-injection,Sql,Sql Injection,这里的学生 刚刚了解到,为了避免SQL注入,最好使用prepare/execute duo: $pdo = new PDO ('mysql:host=something;port=something dbname=something','name','pswd'); $sql = "SELECT name FROM users WHERE email = :em AND password = :pw"; $stmt = $pdo -> prepare($sql); $s

这里的学生

刚刚了解到,为了避免SQL注入,最好使用prepare/execute duo:

$pdo = new PDO ('mysql:host=something;port=something dbname=something','name','pswd');
$sql = "SELECT name FROM users WHERE email = :em AND password = :pw";
$stmt = $pdo -> prepare($sql);
$stmt -> execute (array());
而不是使用:

$stmt = $pdo -> query($sql);
问题是:


在什么情况下,有人会使用查询来代替,因为我们有一种非常快速的方法来保护自己不受SQL注入的影响,有人会使用查询方法吗?如果是,为什么?

几乎从来没有;你会知道如果你处于一种无法使用它的情况下


请注意,即使您正在动态生成查询,您仍然应该使用占位符和参数集独立地生成字符串。

如果可以安全地使用查询(它不是sql注入攻击的目标),我会使用
query
方法,例如:
从用户中选择名称

提示:3个反勾用于代码格式。请注意,在PDO中,占位符不应带有引号
:em
:em'
。干杯,敬请欣赏如果您可以通过
密码
进行选择,则说明您没有正确地散列密码。您应该使用。存在数据库命令不接受参数的情况(例如,在t-SQL中,
DROP TABLE
语句不能参数化;表名必须是文本)。如果您需要动态生成这样的语句,您仍然需要
query
(或者更可能是
exec
)和
quote
(甚至是自定义转义)。好的,所以坚持占位符,避免查询,明白了!完全地希望有帮助!:)