2013-12-13 253 views
4

如果我使用的是PDO准备语句,我有这样的查询多个条件:PDO预处理语句在WHERE子句

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注入的影响,但我想要求确定。我在一篇教程中注意到,我看着他们确实绑定了这个值,即使它不是一个被传递的变量,这让我怀疑我是否做得对。

+3

我没有在0左右的引号中看到感,但一般 - 这是好的,你不需要绑定常量值 –

+1

不需要绑定它是没有必要的 – 2013-12-13 01:21:54

+1

@Dagon - 如果你让你的回应成为一个口水,我会给你信贷。 – hyphen

回答

1

在这个实例绑定是没有必要的,它不是一个变量。

1

不,在这种情况下绑定是没有必要的。 As stated by PHP.net,准备语句一举两得:

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

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

结论:您不必绑定0,因为它不是变量。