Php ';在';带有多个'的子句;和';条件

Php ';在';带有多个'的子句;和';条件,php,sql,Php,Sql,我有一个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() " 这里

我有一个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() "
这里我想检查
occulation
是否是
in
子句中提供的6个值之一(同时在
中添加更多的子句,其中
连接)


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

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

... IN ('occupation','pro_cat1','pro_cat2','pro_cat3','pro_cat4','pro_cat5') ...
        ^ here     ^ etc.
您也不应该将变量直接注入到查询中。相反,您应该为变量使用带有占位符的准备好的语句

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

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

还请注意,无法准备表名和列名,因此在将它们插入查询之前,它们必须始终以白色列出。

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

... IN ('occupation','pro_cat1','pro_cat2','pro_cat3','pro_cat4','pro_cat5') ...
        ^ here     ^ etc.
您也不应该将变量直接注入到查询中。相反,您应该为变量使用带有占位符的准备好的语句

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

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

还要注意的是,表名和列名无法准备好,因此在将它们注入查询之前,必须将它们列为白名单。

它给了我一个结果,但它不是正确的结果。
。。。那么结果不正确呢?它不是在所有职业中搜索,pro_cat1、pro_cat2、pro_cat3、pro_cat4、pro_Cat5您很容易受到sql注入攻击。我建议你们读一下准备好的语句。那个么职业、专业cat1等是表目录中的列吗?您想为给定的州和城市选择行,并且给定的职业至少等于其中一列的内容?这就是查询所做的。或者你想要别的吗?
它给了我一个结果,但不是一个正确的结果
。。。那么结果不正确呢?它不是在所有职业中搜索,pro_cat1、pro_cat2、pro_cat3、pro_cat4、pro_Cat5您很容易受到sql注入攻击。我建议你们读一下准备好的语句。那个么职业、专业cat1等是表目录中的列吗?您想为给定的州和城市选择行,并且给定的职业至少等于其中一列的内容?这就是查询所做的。还是你想要别的?