PHP PDO的预处理语句如何防止SQL注入?使用PDO有哪些其他好处?使用PDO会降低效率吗?

时间:2012-01-03 21:34:37

标签: php pdo sql-injection

我一直在发现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? 但那里的数据并不完全清楚。

2 个答案:

答案 0 :(得分:8)

嗯,乍一看,你的问题看起来更复杂,仅用一个链接就可以解答

  

php pdo的预处理语句如何阻止sql注入?

How can prepared statements protect from SQL injection attacks?

  

使用PDO的其他优缺点是什么?

最有趣的问题。
一个最大的PDO缺点是:它被兜售并传播了一个银弹,另一个崇拜的偶像 虽然没有理解,但与任何其他工具一样,它根本不会有任何好处 PDO具有一些关键功能,如

  • 数据库抽象。这是一个神话,因为它不会改变SQL语法本身。而你根本无法使用Postgre的mysql自动增量ids。更不用说切换数据库驱动程序并不是开发人员经常做出的决定。
  • 占位符支持,实现本机预处理语句或模拟它们。良好的方法,但非常有限。缺少必要的占位符类型,如标识符或SET占位符。
  • 一种帮助方法,可以在不编写循环的情况下将所有记录放入数组中。只有一个。当你需要至少4个让你的工作变得明智而不那么无聊时。
  

使用PDO会降低效率吗?

同样,它不是PDO,而是准备好了降低效率的声明。 它取决于数据库服务器和您的应用程序之间的网络延迟,但对于最真实的案例,您可能认为它可以忽略不计。

答案 1 :(得分:1)

php pdo的预处理语句如何阻止sql注入

我不会因为挑剔这个问题而烦恼,而是会给出真正问题的答案:prepare查询基本上运行mysql_real_esape_string或每个令牌上的等价物(由问题表示)标记或:value)。这样可以更轻松地确保所有可变数据都已正确转义。这不会阻止所有安全问题(例如,%_未转义,这可能会影响LIKE条款。

使用PDO的其他优点/缺点是什么?

据我所知,使用PDO没有任何缺点。我认为一个骗局是它不支持所有已知的数据库..驱动程序有限,但如果您想将PDO用于它无法支持的数据库,这只是一个骗局。优点?你从PDO中获得了很大的灵活性,特别是如果你为它创建一个包装器(以防万一你需要切换DBA),并且由于它是编译C,它应该比使用其他php函数更快(见下文)。它还使您不必编写自己的方法来准备查询等。

使用PDO会降低效率吗

与什么相比降低效率?什么样的效率?编程效率还是执行速度?据我所知,PDO是编译的,所以使用它实际上应该更快而不是创建自己的DB包装器来准备查询等。如果这真的是一个问题,你可以对差异进行基准测试,但我建议你先看看其他地方的减速度。