我最近发现您可以在PDO中绑定空值:
$stmt = $db->prepare('SELECT * FROM foo WHERE bar = :bar');
$stmt->execute(array(':bar'=>null));
$foo = $stmt->fetchAll(PDO::FETCH_OBJ);
这将成功地从数据库中提取所有
foo
,其中bar
列为null。但是,我现在想相反。我想获取
bar
列不为null的所有列。我知道我可以简单地将
bar = :bar
替换为bar IS NOT NULL
。但是,我想避免这种情况,而是通过准备好的语句来完成,因为有时我必须动态地构建查询字符串,而必须手动执行它会带来很多额外的工作。这可能吗?
最佳答案
您不能绑定“ NOT NULL”。您只能绑定值。 “ IS NOT NULL”不是值,它是完全不同的查询语法。您只需要动态地构建查询,值绑定就不能帮助您:
$query = 'SELECT ... WHERE ';
if (/* condition is NOT NULL */) {
$query .= 'foo IS NOT NULL';
$stmt = $db->prepare($query);
} else {
$query .= 'foo = :foo';
$stmt = $db->prepare($query);
$stmt->bindValue('foo', $foo);
}
$stmt->execute();
关于php - 在PDO中绑定(bind)“非null”?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57629319/