$id
可以但不一定是NULL
。除了使用PHP测试$id
的{{1}},并将查询更改为NULL
之外,如何执行此查询?
IS NULL
根据https://stackoverflow.com/a/1391801/1032531,我尝试$stmt = $db->prepare("SELECT * FROM t WHERE id=?");
$stmt->execute([$id]);
return $stmt->fetchAll();
,但收到错误bindValue(':id', null, PDO::PARAM_INT);
我也尝试了Fatal error: Cannot pass parameter 2 by reference
,虽然没有错误,但我没有得到任何结果。
答案 0 :(得分:3)
您正在寻找的是ANSI标准IS NOT DISTINCT FROM
运算符。对NULL IS NOT DISTINCT FROM NULL
返回true。
MySQL使用<=>
比较运算符支持此功能。所以你可以使用:
SELECT *
FROM t
WHERE id <=> ?
当您与NULL
进行比较时,假设您确实需要id
的{{1}}值。通常,如果参数为NULL
:
NULL
或:
WHERE id = ? OR (? IS NULL)
答案 1 :(得分:0)
正如您所注意到的,SQL中的null
不是值,并且无法使用=
运算符进行评估,但必须使用is
null
运算符。一次性完成这一操作的一种巧妙方法是一次使用两个条件,一个处理$stmt = $db->prepare("SELECT * FROM t WHERE id=? OR (id IS NULL AND ? IS NULL");
$stmt->execute([$id, $id]);
return $stmt->fetchAll();
,一个处理实际值:
{{1}}