在PHP中查询不返回空白变量的结果

在PHP中查询不返回空白变量的结果,php,mysql,sql,Php,Mysql,Sql,当参数为空时,从PHP运行SELECT语句不会返回值。如果从MYSQL查询窗口运行相同的语句,则可以很好地满足上述条件 这是MYSQL中的SELECT语句 SELECT * FROM table1 WHERE field1=IFNULL(:var1,field1); 这是PHP中的代码 if(isset($_GET['var1'])){ $var1=mysqli_real_escape_string($conn,$_GET['var1']); } $sql = "SELECT * FROM t

当参数为空时,从PHP运行SELECT语句不会返回值。如果从MYSQL查询窗口运行相同的语句,则可以很好地满足上述条件

这是MYSQL中的SELECT语句

SELECT * FROM table1 WHERE field1=IFNULL(:var1,field1);
这是PHP中的代码

if(isset($_GET['var1'])){
$var1=mysqli_real_escape_string($conn,$_GET['var1']);
}
$sql = "SELECT * FROM table1 WHERE 
         field1= IFNULL('$var1',field1)";
$query = mysqli_query($conn, $sql);     
当变量var1留空时,查询应获取所有记录。如果为var1输入了一个值,则只显示该记录。这个很好用。问题是变量var1保留为空时。不显示任何记录

请注意,在MYSQL查询窗口中为这两种场景运行SELECT语句非常有效

只是一个更新:我尝试在调用PHP代码的HTML表单中为字段(var1)添加一个默认值('ALL')。 然后,我在PHP代码中更改了SELECT语句,如下所示:

$sql = "SELECT * FROM table1  WHERE 
         field1= COALESCE('$var1','ALL',field1)";

即使这样也不行。伙计们,必须有办法做到这一点。

只有当变量不为空时,才可以使用
WHERE
子句:

$sql = "SELECT * FROM table1" ;
if(isset($_GET['var1'])){
    $var1=mysqli_real_escape_string($conn,$_GET['var1']);
    $sql .= " WHERE field1 = '$var1'" ;
}

$query = mysqli_query($conn, $sql); 
尝试添加nullif

select
    *
from
    table1
where
    field1 = ifnull(nullif('$var1', ''), field1)

应该这样做。使用if语句,并对这两个场景进行两个单独的查询

if (isset($_GET['var1'])) {
    $stmt = $conn->prepare('SELECT * from table1 WHERE field1=?');
    $stmt->bind_param('s', $_GET['var1']);
    $stmt->execute();
    $result = $stmt->get_result();
} else {
    $result = $conn->query('SELECT * FROM table1');
}

注意我如何使用
query()
。只有在SQL中没有变量时,才能使用该方法。如果您有一些变量数据,则需要使用占位符,然后在构建字段时使用
bind_param()

对其进行绑定。您的测试为
IFNULL('$var1',field1)
-第一个字段只能是
'
-永远不能为null,在PHP块中,在WHERE之后使用
var1
,而不是
field1
(在
$sql
中)@BarbarosÖzhan,这是一个打字错误。我已经编辑了这个问题。谢谢你指出这一点。你知道如何解决这个问题吗?@NigelRen所以这种方法在PHP中不起作用?有什么解决方法吗?在您更新代码后,它会返回一个默认值“ALL”,
field1=ifnull(nullif(“$var1”,“ALL”),field1)
应该可以工作
if (isset($_GET['var1'])) {
    $stmt = $conn->prepare('SELECT * from table1 WHERE field1=?');
    $stmt->bind_param('s', $_GET['var1']);
    $stmt->execute();
    $result = $stmt->get_result();
} else {
    $result = $conn->query('SELECT * FROM table1');
}