与使用mysql_query相比,使用PDO::query在安全性上有什么好处吗?



我希望重构一些遗留的PHP代码,并且我知道PDO在添加预处理语句等方面更安全,但是我想知道使用PDO::query()方法与mysql_query()方法是否有任何安全优势。有吗?

除了PDO或mysql_*中的错误之外,数据库查询的安全问题取决于正在运行的查询,而不是用来连接数据库的。

如果你用userdata创建了一个不安全的查询,并使用PDO::query()执行它,它就像使用mysql_query()一样不安全。同样,如果您有一个安全查询,使用PDO::query()运行它与使用mysql_query()运行它实际上是一样的。

不,但是如果您使用PDO准备语句而不是PDO:query(),那么您将相当不受注入攻击的影响,因为它将为您转义变量。

与mysql函数相比,PDO还有其他优点…

prepared statements
transactions
ability to switch drivers
can get result rows as objects
etc

您可以从用户输入中连接PDO准备语句中的字符串,因此无论如何都不会更安全。准备好的陈述也有一些缺点。例如,您不能在使用可变数据量的情况下创建简单查询,例如:

WHERE id IN (1,2,5,7,9,23)

如果你知道你将只使用MySQL,我建议你使用mysqli而不是PDO。不需要不必要的抽象层。

最新更新