2016-10-16 31 views
0

我有一个简单的MySQL数据库,我从PHP查询。我有一个用户通过表单输入一些约束,然后希望基于约束返回SELECT查询的结果。当使用两个约束条件时,我所拥有的都在工作。但是,如果用户没有指定其中一个约束,那么SELECT查询不会返回任何结果,我认为这是因为它将约束变量视为空。如何忽略SQL SELECT查询中的空约束

如何获得SELECT查询使用约束如果它不是空的,但如果它为空忽略它?

这是我早些时候尝试的,但它不工作。我认为我可以测试空白并使用OR来忽略它。

$query="SELECT * FROM food_items 
WHERE (type IN ('$foodtypes') OR ('$foodtypes') > '') 
AND ('$budget' > '' OR cost <= ('$budget')) 
"; 

在这个例子中,类型和成本是在数据库字段和$ foodtypes和$预算是来自用户的输入取变量。

感谢

+0

动态构建查询并仅查询传入的值。您似乎也开放给SQL注入。应该使用参数化查询。 – chris85

+0

,你可能打算做''$预算'=''或成本<=('$预算')'(和foodtypes一样)。 (请注意=而不是>) – Rik

+0

注意:不要使用“constraint”这个词:它在SQL中有不同的含义。 – wildplasser

回答

0

我想你应该根据不同的约束的价值构建查询:

$query = "SELECT * FROM food_items WHERE " . 
    ($foodtypes != "" ? "type IN ('$foodtypes')" : "TRUE") . " AND " . 
    ($budget ? "cost <= $budget" : "TRUE") . " AND " . 
.. and so on .. 

安全注释:使用(见mysqli_real_escape_string)之前,始终逃不出你的SQL字符串。