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


How does PHP PDO's prepared statements prevent sql injection? What are other benefits of using PDO? Does using PDO reduce efficiency?

我一直在PHP PDO's prepared statements prevents SQL injection发现这句话。

  • php PDO(PDO的准备语句(如何防止SQL注入?
  • 使用PDO
  • (PDO的准备声明(的其他优点/缺点是什么?
  • 使用PDO
  • (PDO的预处理报表(会降低效率吗?

我已经读过这个:PDO准备的语句是否足以防止SQL注入?但那里的数据并不完全清楚。

好吧,乍一看,您的问题看起来更复杂,只需一个链接即可回答

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

预准备语句如何防止 SQL 注入攻击?

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

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

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

使用 PDO 会降低效率吗?

同样,降低效率的不是PDO,而是准备好的陈述。这取决于数据库服务器和应用程序之间的网络延迟,但对于大多数真实情况,您可以忽略不计。

  1. PDO用来防止SQL注入的主要方法是准备查询中带有参数的语句,并在执行查询时提供值。 PDO将自动处理值中的引号和其他字符的转义。 只要在每个查询中执行此操作,而不是直接将值放入查询中,就可以防止 SQL 注入。 您链接的问题中的答案显示了如何完成此操作。

  2. 使用 PDO
  3. 或任何 DBA 的主要优点之一是 PDO 封装了与实际数据库的低级通信,让您只处理实际的查询逻辑。 它使您可以毫不费力地更改正在使用的数据库(MySQL,Postgre等(。 它还使使用主/从设置和只读副本变得更加容易。

  4. 在大多数情况下,使用 PDO 只会比直接函数调用稍慢。 无论如何,性能的轻微下降是非常值得的。

PHP PDO的预准备语句如何防止SQL注入

与其对这个问题吹毛求疵感到烦恼,不如给你一个真正问题的答案:prepare查询本质上在每个令牌上运行mysql_real_esape_string或某种等效项(由问号或:value表示(。 这样可以更轻松地确保正确转义所有变量数据。 这并不能防止所有安全问题(例如,%_未被转义,这可能会影响LIKE子句(。

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

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

使用 PDO 会降低效率吗

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