【问题标题】:How to ignore an empty constraint in SQL SELECT query如何忽略 SQL SELECT 查询中的空约束
【发布时间】:2016-10-16 22:09:38
【问题描述】:

我有一个从 PHP 查询的简单 MySQL 数据库。我有一个用户通过表单输入了一些约束,然后想要根据约束从 SELECT 查询中返回结果。当使用这两个约束时,我所拥有的就是工作。但是,如果用户未指定其中一个约束,则 SELECT 查询不会返回任何结果,我认为这是因为它将约束变量视为空。

如果 SELECT 查询不为空,如何让它使用约束,但如果它为空则忽略它?

这是我之前尝试过的,但它不起作用。我想我可以测试空并使用 OR 来忽略它。

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

在本例中,类型和成本是数据库中的字段,$foodtypes 和 $budget 是取自用户输入的变量。

谢谢

【问题讨论】:

  • 动态构建查询,只查询传入的值。您似乎也对 SQL 注入持开放态度。应该使用参数化查询。
  • 你可能打算这样做'$budget' = '' OR cost &lt;= ('$budget')(对于食物类型也是如此)。 (注意 = 而不是 >。)
  • 注意:不要使用constraint这个词:它在SQL中有不同的含义。

标签: php mysql


【解决方案1】:

我认为您应该根据约束的值以不同的方式构建查询:

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

安全注意事项:在使用前始终转义您的 SQL 字符串(请参阅 mysqli_real_escape_string)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-11-04
    • 2015-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-23
    • 1970-01-01
    相关资源
    最近更新 更多