我最近发现你可以在PDO中绑定空值:
$stmt = $db->prepare('SELECT * FROM foo WHERE bar = :bar');
$stmt->execute(array(':bar'=>null));
$foo = $stmt->fetchAll(PDO::FETCH_OBJ);
这将成功从数据库中获取所有foo
,bar
列为空。
但是,我现在想做相反的事情。我想获取bar
列不 null的所有列。
我知道我可以简单地用bar = :bar
替换bar IS NOT NULL
。但是,我想避免这种情况,而是通过预处理语句来完成它,因为我有时必须动态地构建查询字符串,而且必须手动完成它会带来很多额外的工作。
这可能吗?
答案 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,您仍然需要另一个查询。