我希望重构一些遗留的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。不需要不必要的抽象层。