php - WHERE 子句中的 NULL

标签 php mysql sql pdo prepared-statement

我有以下准备好的声明。一切都很好...

$stmt=$conn->prepare('UPDATE t1 SET c1=? WHERE c2=? AND c3!=?');
$stmt->execute(array(1,2,3));

但现在我希望使用相同的准备好的语句,但在 WHERE 子句中包含 NULL 值。

$stmt->execute(array(1,NULL,NULL));

这会解析为 UPDATE t1 SET c1=1 WHERE c2=NULL AND c3!=NULL ?这不是正确的查询 UPDATE t1 SET c1=1 WHERE c2 IS NULL AND c3 IS NOT NULL ?如何才能拥有一个在 WHERE 子句中同时允许 NULL 和非 NULL 值的准备好的语句?

最佳答案

您询问 SQL 查询是否包含

 WHERE col = ?

会自动转换为

 WHERE col IS NULL

通过将 NULL 值绑定(bind)到参数。

答案是。如果列具有 NULL 值,则它永远不能与任何值进行比较。

您需要为此准备一个不同的查询。

关于php - WHERE 子句中的 NULL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24416929/

相关文章:

MySQL NOW() 函数具有高精度

php - 关于 PHP PDO Select for Update Transaction 的说明

sql - SQL:选择至少一行具有特定值的不同“类别”

php - Laravel中两点之间的Haversine距离计算

php - 为 CMS 动态生成页面链接

php - 将用户配置文件信息与用户登录信息保存在同一数据库中

mysql - 如何检查值是否在 MySQL 枚举中?

PHP:为什么当您向不存在索引的数组添加值时它不会引发通知?

php - (PHP, MySQL) Function only works on 1 of 2 cases, cannot find the difference

SQL 服务器 : custom column sort in WHERE IN