& # 39;上# 39;带有多个'AND'条件


'IN' clause with multiple 'AND' Condition

我有一个SQL查询,它返回给我一个不正确的结果。

" SELECT * FROM directory WHERE '".$_REQUEST['occupation']."' IN (occupation,pro_cat1,pro_cat2,pro_cat3,pro_cat4,pro_cat5) AND state = '".$_REQUEST['state']."' AND city = '".$_REQUEST['city']."' AND status = 1 ORDER BY rand() "

这里我想检查occupation是否是IN子句中提供的6个值之一(同时还在WHERE中添加了一些与AND连接的子句)。

它确实返回给我一个结果,但是它是不正确的。我哪里做错了?

如果要查找的值是字符串,则需要引用它们:

... IN ('occupation','pro_cat1','pro_cat2','pro_cat3','pro_cat4','pro_cat5') ...
        ^ here     ^ etc.

你也不应该直接在查询中注入变量。相反,您应该使用带有占位符的准备语句来为您的变量。

此外,列名不应该被引用(除非它们是保留字,包含空格等),但如果需要引用它们,应该使用反引号:

... directory where `".$_REQUEST['occupation']."` IN ...
                    ^ here                      ^

还要注意,表名和列名是不能准备的,所以在将它们注入查询之前,必须将它们列入白名单。