在 where 子句中具有多个条件的 PDO 准备语句

Posted

技术标签:

【中文标题】在 where 子句中具有多个条件的 PDO 准备语句【英文标题】:PDO Prepared Statements with multiple conditions in where clause 【发布时间】: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 - 如果你把你的回应变成一个回答,我会给你功劳。 【参考方案1】:

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

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

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

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

【讨论】:

【参考方案2】:

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

【讨论】:

以上是关于在 where 子句中具有多个条件的 PDO 准备语句的主要内容,如果未能解决你的问题,请参考以下文章

如何在 mysqli 准备语句中使用多个内部连接和多个 WHERE 子句? [复制]

具有多个条件的sql where子句c#Web服务[重复]

JDBC WHERE子句条件实例

在PDO的where子句中签署“all”

使用具有一个条件的 WHERE 子句运行 100 个 SQL 查询,还是使用具有 100 个条件的 WHERE 子句的一个查询更好?

我们可以在 WHERE 子句中对同一列使用多个 AND 条件吗? [复制]