php - 在PDO中绑定(bind)“非null”?

标签 php mysql pdo

我最近发现您可以在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/

相关文章:

php - 新闻提要的 SQL 内部连接

php - 包括 php "template"向下移动

java - 尝试将数据库中的信息显示到终端中

php - PDO 不能绑定(bind)两个属性

php - PHP 有多安全?

php - 让用户更改自己的密码?

mysql - 使用数组删除Mysql记录

php - 存储在 mysql (longblob) 中的图像不会显示

php - 从许多 post_ids 中选择 1 个 MySQL 中的随机项目

php - 需要保存两次提交的 $_POST 数据