Php 如果传递的变量为空或null,如何取消设置或使条件为真

Php 如果传递的变量为空或null,如何取消设置或使条件为真,php,mysql,sql,Php,Mysql,Sql,我有一个疑问 SELECT * FROM table_name WHERE id = '$id' 如果$id为空或空,则我需要从id为非空的表中获取所有数据 我已经试过了 SELECT * FROM table_name WHERE ( ('$id' != '' AND id = '$id') OR ('$id' = '' AND id IS NOT NULL) ) 但是在没有if条件的情况下寻找更好的解决方案,因为我有很多和条件 提前感谢…试试这个: 选择*

我有一个疑问

SELECT * FROM table_name WHERE id = '$id'

如果
$id
,则我需要从
id
非空
的表中获取所有数据

我已经试过了

SELECT
  * 
FROM
  table_name 
WHERE
( 
  ('$id' != '' AND id = '$id') 
  OR 
  ('$id' = '' AND id IS NOT NULL)
)

但是在没有
if
条件的情况下寻找更好的解决方案,因为我有很多
条件

提前感谢…

试试这个:

选择*
从表\u名称
其中(id='$id'或$id为NULL或TRIM($id)='')
如果
$id
不为null且不为空,则将根据
id
字段对其进行检查。如果
$id
为null或空,则忽略筛选器并返回所有行

更新

选择*
从表\u名称
在哪里(
(如果(修剪($id),“”)为空且id不为空,则为空)或
id=$id
)

您可以使用
php
本身来完成技巧,例如:

$sql = 'SELECT * FROM table_name where id is not null';

if($id){
   $sql .= ' and id = '.$id;
}

非常感谢@Akina的评论

这是解决方案


SELECT*FROM table\u name其中id=COALESCE(NULL如果($id,),id)

认为此代码易受攻击。对于NULL,您可以使用
其中id=COALESCE($id,id)
。请注意-没有ticks-wrapped参数,它们会将NULL从“未知”转换为确定的4字符字符串文字。@Akina还需要空检查…如果是,请使用
其中id=COALESCE(NULLIF($id',),id)
。空字符串和空字符串在本例中都表示“全部返回”。@Akina is
$id
需要任何引号…但是在没有if条件的情况下寻找更好的解决方案,因为我有很多条件,我需要从
id
notnull
的表中获取所有数据,上面的查询将获取所有数据,包括
id
is
null
如果
$id
为空,那么
或id=$id