1

我正在尝试创建一个 php 脚本,该脚本根据用户的过滤器输入查询数据库

所以本质上我想要

select * from table where parent_id = '$filter_value'

但是我想为 $filter_value 应用一个默认值,如果用户没有指定任何过滤器,它将生效,并将提取所有可能的结果。

我尝试使用 * 但它没有工作......

4

4 回答 4

3

两种方式:

  1. 将值与 NULL 进行比较

    SELECT * 
    FROM table
    WHERE ($filter_value IS NULL OR parent_id = '$filter_value')
    
  2. 根据 $filter_value 是否包含值动态创建 SQL。如果没有,您的查询应该是:

    SELECT *
    FROM table
    
于 2012-10-14T23:59:25.787 回答
2

检查过滤器变量是否为空,或者只是将查询包装在 if 语句中:

SELECT * FROM baz WHERE foo = :bar OR :bar IS NULL
于 2012-10-14T23:58:25.943 回答
1

这不完全是你问的,但它非常接近,我认为一个更好的方法。你可以这样做:

if ( empty( $filter_value ) === false ) {
    select * from table where parent_id = '$filter_value'
} else {
    select * from table
}

这只是一个例子,不是很好的 php 语法。

但是这个想法是,如果你想根据某事有不同的行为,那么你应该这样编程,例如,使用 if,那样,你知道每种情况下会发生什么并控制情况,而不是取决于什么mysql 使用传递的空值。

于 2012-10-15T00:57:22.747 回答
0

好的,我尝试只插入一个空格作为默认 var 值,如

$filter_value = ''

解决了问题:$

于 2012-10-14T23:57:37.177 回答