在PHP中查询不返回空白变量的结果
当参数为空时,从PHP运行SELECT语句不会返回值。如果从MYSQL查询窗口运行相同的语句,则可以很好地满足上述条件 这是MYSQL中的SELECT语句在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
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');
}