不能在mysqli_query上使用AND运算符?

时间:2014-07-02 15:37:29

标签: php mysql sql mysqli

我需要使用多个参数过滤我的查询,但我不能使用mysqli_query而不是mysql_query来执行此操作。

如果我不使用AND运算符,我的代码就能完美运行,例如:

$results = mysqli_query($connecDB,"SELECT * FROM table WHERE company='Company1' ORDER BY id DESC");

但是如果我使用AND运算符:

 $results = mysqli_query($connecDB,"SELECT * FROM table WHERE company='Company1' AND company='Company2' ORDER BY id DESC");

代码不再起作用了。我四处搜索,看起来我需要准备好的语句,但我无法找到让代码工作的方法。

有人知道我做错了什么吗?

4 个答案:

答案 0 :(得分:5)

试试:

SELECT * FROM table WHERE company IN ( 'Company1', 'Company2' ) ORDER BY id DESC

您不能同时拥有Company1Company2的公司。

答案 1 :(得分:1)

首先,绝对没有两个谓词都会评估为真的行。

MySQL正在查看每一行,并检查该行是否满足谓词,在这种情况下,整个WHERE子句的结果是否返回TRUE。

如果'Company1'列中有一行值company,那么第一个谓词:

company = 'Company1'

将评估为TRUE;和第二个谓词:

company = 'Company2'

将评估为FALSE。

根据布尔AND运算符的逻辑,TRUE AND FALSE求值为FALSE,因此不会返回该行。

这足以解释为什么查询返回0行。

如果您希望查询在company列的值与'Company1''Company2'匹配时返回一行,则两个谓词可以与布尔值OR组合操作

答案 2 :(得分:0)

使用OR代替AND:

SELECT * FROM table WHERE (company='Company1' OR company='Company2') ORDER BY id DESC

答案 3 :(得分:0)

实际上,它与你的逻辑有关。您必须使用OR而不是AND,因为公司字段中只能包含一个公司,而公司字段不能同时包含两个公司。因此,您必须将$查询更改为以下内容:

SELECT * FROM table WHERE (company='Company1' OR company='Company2') ORDER BY id DESC

SELECT * FROM table WHERE company IN ( 'Company1', 'Company2' ) ORDER BY id DESC