我的查询中有一个 CASE WHEN
函数。像这样:
CASE WHEN h.user_id = :user_id THEN '1'
ELSE '0'
END paid
然后我像这样传递 :user_id
:
$sth->bindValue(":user_id", $user_id, PDO::PARAM_INT);
好吧,有时 $user_id
是 NULL
。我已经听说当查询中的某些内容等于 NULL
时,就会发生一些不好的事情。现在我想知道,当 $user_id
为 NULL
时会发生什么?
我测试了它,但一切正常,我没有发现任何问题。当 $user_id
为 NULL
时,$result['paid']
为 1
或 CASE。 .WHEN
中断?
编辑:
所有我想做的,当 h.user_id = :user_id
然后 paid = 1
。但有时 :user_id
是 null
。我怎样才能转义 null
?
最佳答案
您遇到的问题是因为,根据标准,将任何内容与 null
进行比较 给出了 null
的结果,最终被强制转换为 false
强>。因此,如所写,您的表达式将始终返回 0
当:user_id
或 h.user_id
是 null
.
幸运的是,这种情况经常出现,MySQL 提供了一些称为 "spaceship" or " NULL
-safe equal" operator 的语法糖。 ,看起来像 <=>
.它的使用方式与正常的 =
完全一样运算符,除了它返回 false
(不是 null
)比较 null
到非 null
和 true
当比较两个 null
.
表达式变成了
CASE WHEN h.user_id <=> :user_id THEN '1'
ELSE '0'
END paid
关于php - MySQL:当某物等于 NULL 时会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36706075/