绑定" not null"在PDO?

时间:2015-10-09 08:54:21

标签: php mysql pdo

我最近发现你可以在PDO中绑定空值:

$stmt = $db->prepare('SELECT * FROM foo WHERE bar = :bar');
$stmt->execute(array(':bar'=>null));
$foo = $stmt->fetchAll(PDO::FETCH_OBJ);

这将成功从数据库中获取所有foobar列为空。

但是,我现在想做相反的事情。我想获取bar null的所有列。

我知道我可以简单地用bar = :bar替换bar IS NOT NULL。但是,我想避免这种情况,而是通过预处理语句来完成它,因为我有时必须动态地构建查询字符串,而且必须手动完成它会带来很多额外的工作。

这可能吗?

2 个答案:

答案 0 :(得分:7)

你无法绑定" NOT NULL"。您只能绑定。 "不是空的"不是一个值,它是完全不同的查询语法。您只需动态构建查询,值绑定无法帮助您:

var express = require('express');
var router = express.Router();

router.get("/", function (req, res) {
    res.render('index');
});

router.get("/list", function(req, res) {/*list implementation*/});

....

module.exports = router;

答案 1 :(得分:2)

我担心你的假设是错的。虽然您通常可以绑定NULL值,但WHERE bar = NULL语句不会返回任何行,也不会返回原始SQL或PDO。整个语句将被计算为NULL并且不会匹配任何行。

相反,您可以使用NULL-safe等于运算符<=>来匹配NULL或具有某些值的字段。但是要使值不为null,您仍然需要另一个查询。