我一直在发现这句话 PHP PDO's prepared statements prevents SQL injection
。
- php PDO(PDO准备好的语句)如何阻止sql注入?
- 使用PDO(PDO准备好的陈述)的其他利弊是什么?
- 使用PDO(PDO准备好的声明)会降低效率吗?
我读过这个: PDO准备好的语句是否足以阻止SQL注入? 但那里的数据并不完全清楚。
我一直在发现这句话 PHP PDO's prepared statements prevents SQL injection
。
- php PDO(PDO准备好的语句)如何阻止sql注入?
- 使用PDO(PDO准备好的陈述)的其他利弊是什么?
- 使用PDO(PDO准备好的声明)会降低效率吗?
我读过这个: PDO准备好的语句是否足以阻止SQL注入? 但那里的数据并不完全清楚。
嗯,乍一看你的问题看起来更复杂,只需一个链接即可回答
php pdo的预处理语句如何防止sql注入?
使用PDO的其他优点/缺点是什么?
最有趣的问题。
一个最大的PDO缺点是:它被兜售并传播了一个银弹,另一个崇拜的偶像。
虽然没有理解,但它会像其他任何工具一样毫无益处。
PDO有一些关键功能,如
使用PDO会降低效率吗?
同样,它不是PDO,而是准备好了降低效率的陈述。 它取决于数据库服务器和您的应用程序之间的网络延迟,但您可能认为它对于最真实的情况可以忽略不计。
PDO用于防止SQL注入的主要方法是使用查询中的参数准备语句,并在执行查询时提供值。 PDO将自动处理值中的转义引号和其他字符。只要你这样做 一切 查询,而不是直接在查询中放置值,您可以防止SQL注入。您链接的问题中的答案显示了如何完成此操作。
使用PDO或任何DBA的主要优点之一是PDO将低级通信封装到实际的DB中,使您只处理实际的查询逻辑。它允许您以最小的努力更改您正在使用的数据库(MySQL,Postgre等)。它还可以更轻松地使用主/从设置和读取副本。
在大多数情况下,使用PDO只会比直接函数调用慢一点。无论如何,性能略有下降是值得的。
我不会因为挑剔这个问题而烦恼,而是会给你真正问题的答案: prepare
查询基本上运行 mysql_real_esape_string
或每个令牌上的等价物(由问号或。表示) :value
)。这样可以更轻松地确保所有可变数据都已正确转义。这并不能防止所有安全问题(例如, %
和 _
没有逃脱,这可能会影响 LIKE
条款)。
据我所知,使用没有任何缺点 PDO
。我认为一个骗局是它不支持所有已知的数据库..驱动程序有限,但如果你想将PDO用于它无法支持的数据库,这只是一个骗局。优点?你从PDO中获得了很大的灵活性,特别是如果你为它创建一个包装器(以防万一你需要切换DBA),并且由于它是编译C,它应该比使用其他php函数更快(见下文)。它还使您不必编写自己的方法来准备查询等。
与什么相比降低效率?什么样的效率?编程效率还是执行速度?据我所知,PDO是编译的,所以实际上应该使用它 更快 而不是创建自己的数据库包装器来准备查询等。如果这确实是一个问题,你可以对差异进行基准测试,但我建议你先考虑减速。