MySQL PDO WHERE语句中为NULL

时间:2016-06-12 13:09:55

标签: php mysql sql pdo null

$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,虽然没有错误,但我没有得到任何结果。

2 个答案:

答案 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}}