我一直在发现PHP PDO's prepared statements prevents SQL injection
这句话。
- php PDO(PDO准备好的语句)如何阻止sql注入?
- 使用PDO的其他利弊是什么(PDO准备好的声明)?
- 使用PDO(PDO准备的声明)会降低效率吗?
我读过这个:Are PDO prepared statements sufficient to prevent SQL injection? 但那里的数据并不完全清楚。
答案 0 :(得分:8)
嗯,乍一看,你的问题看起来更复杂,仅用一个链接就可以解答
php pdo的预处理语句如何阻止sql注入?
How can prepared statements protect from SQL injection attacks?
使用PDO的其他优缺点是什么?
最有趣的问题。
一个最大的PDO缺点是:它被兜售并传播了一个银弹,另一个崇拜的偶像
虽然没有理解,但与任何其他工具一样,它根本不会有任何好处
PDO具有一些关键功能,如
使用PDO会降低效率吗?
同样,它不是PDO,而是准备好了降低效率的声明。 它取决于数据库服务器和您的应用程序之间的网络延迟,但对于最真实的案例,您可能认为它可以忽略不计。
答案 1 :(得分:1)
我不会因为挑剔这个问题而烦恼,而是会给出真正问题的答案:prepare
查询基本上运行mysql_real_esape_string
或每个令牌上的等价物(由问题表示)标记或:value
)。这样可以更轻松地确保所有可变数据都已正确转义。这不会阻止所有安全问题(例如,%
和_
未转义,这可能会影响LIKE
条款。
据我所知,使用PDO
没有任何缺点。我认为一个骗局是它不支持所有已知的数据库..驱动程序有限,但如果您想将PDO用于它无法支持的数据库,这只是一个骗局。优点?你从PDO中获得了很大的灵活性,特别是如果你为它创建一个包装器(以防万一你需要切换DBA),并且由于它是编译C,它应该比使用其他php函数更快(见下文)。它还使您不必编写自己的方法来准备查询等。
与什么相比降低效率?什么样的效率?编程效率还是执行速度?据我所知,PDO是编译的,所以使用它实际上应该更快而不是创建自己的DB包装器来准备查询等。如果这真的是一个问题,你可以对差异进行基准测试,但我建议你先看看其他地方的减速度。