【问题标题】:PDO Prepared Statements with multiple conditions in where clause在 where 子句中具有多个条件的 PDO 准备语句
【发布时间】:2013-12-31 16:30:33
【问题描述】:

如果我使用 PDO 准备好的语句,并且我有这样的查询:

SELECT cat_name, cat_id_PK, cat_amount
FROM categories
WHERE month=? AND is_recurring = '0'
ORDER BY cat_name ASC;

$results->bindValue(1, $cur_month);

我是否也应该绑定 is_recurring 子句的值? '0' 是硬编码的,我认为它不会让我容易受到 SQL 注入的影响,但我想确定一下。我注意到在我正在查看的教程中,他们确实绑定了该值,即使它不是被传递的变量,这让我怀疑我是否做得对。

【问题讨论】:

  • 我在 0 左右的引号中看不到任何意义,但通常 - 这没关系,您不需要绑定 const 值
  • 不需要绑定
  • @Dagon - 如果你把你的回应变成一个回答,我会给你功劳。

标签: php mysql pdo prepared-statement sql-injection


【解决方案1】:

不,在这种情况下不需要绑定。 As stated by PHP.net,准备好的语句有两个目的:

  1. 查询只需解析一次,因此运行速度更快
  2. 它们可以防止 SQL 注入

由于您在查询中对该值进行硬编码,因此两者都不适用。查询保持不变,因此只需编译一次。并且没有用户输入粘贴到查询中,所以 SQL 注入是不可能的。 (当然,只要您确实绑定其他值)

结论:你不必绑定0,因为它不是可变的。

【讨论】:

    【解决方案2】:

    在这种情况下,绑定不是必需的,它不是变量。

    【讨论】:

      猜你喜欢
      • 2013-04-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-28
      • 2020-12-13
      相关资源
      最近更新 更多