我有一个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 ^
还要注意,表名和列名是不能准备的,所以在将它们注入查询之前,必须将它们列入白名单。