php - MySQL:当某物等于 NULL 时会发生什么?

标签 php mysql sql null

我的查询中有一个 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_idNULL。我已经听说当查询中的某些内容等于 NULL 时,就会发生一些不好的事情。现在我想知道,当 $user_idNULL 时会发生什么?

我测试了它,但一切正常,我没有发现任何问题。当 $user_idNULL 时,$result['paid']1CASE。 .WHEN 中断?


编辑:

所有我想做的,当 h.user_id = :user_id 然后 paid = 1。但有时 :user_idnull。我怎样才能转义 null

最佳答案

您遇到的问题是因为,根据标准,将任何内容与 null 进行比较 给出了 null 的结果,最终被强制转换为 false 。因此,如所写,您的表达式将始终返回 0:user_idh.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/

相关文章:

php - 没有从谷歌日历 API v3 获取谷歌日历事件的颜色 ID

php - 如何使用 css 和 jquery 隐藏具有数据库值的表?

mysql - 如何将现有数据库的 "innodb_file_per_table"参数从 "OFF"更改为 "1"?

mysql - 我如何根据mysql中字符串的长度修剪前导零

android - sqlite 插入表中选择 * 从

mysql - 查询后替换内容

mysql - 如何在 MySQL 数据库中插入文件?

php - 如何解析一些html标签内容并用一些特殊字符(如 "|")分隔它们?

php - 是否可以在 mysql 中更新然后插入?

mysql - 无法在 MySQL Workbench 中创建表