PHP PDO 准备语句绑定(bind) NULL 值

标签 php mysql pdo

我正在尝试将 SQL 查询作为准备好的语句运行 - 我尝试绑定(bind)一个 NULL 值。好吧,我在网上做了一些研究,是的,我已经在 stackoverflow 上找到了所有已知主题。

到目前为止我的代码:

$stmt = $db->prepare("SELECT c.*, COUNT(d.servername) as servercount, d.controller FROM customers C JOIN customerdata d ON c.id = d.customer WHERE isVdi = :isVdi AND d.controller = :controller GROUP BY d.customer ORDER BY c.name ASC, c.environment ASC");
            $stmt->bindValue(':isVdi', $isVdi);
            $stmt->bindValue(':controller', null, PDO::PARAM_INT);
            $stmt->execute();
            return $stmt->fetchAll();

但这行不通。我得到一个空的结果数组。当我将 controller = :controller 替换为 controller IS NULL 时,它工作得很好。

最后,我想将参数绑定(bind)到变量中的 :controller 上,但现在我正试图直接将 NULL 写入其中,因为这根本行不通。

我是这样找到的: How do I insert NULL values using PDO?

我也已经尝试过使用 PDO::PARAM_NULL 和所有这些东西 - 没有任何效果。我真的不明白。

感谢任何帮助。

最佳答案

这是您的查询:

SELECT c.*, COUNT(d.servername) as servercount, d.controller
FROM customers C JOIN
     customerdata d
     ON c.id = d.customer
WHERE isVdi = :isVdi AND d.controller = :controller
GROUP BY d.customer
ORDER BY c.name ASC, c.environment ASC;

不幸的是,任何 = NULL 都不会返回 true。更不幸的是,MySQL 不支持 ANSI 标准 NULL-safe comparator is not distinct from。但幸运的是它有一个替代方案。你可以试试这个:

SELECT c.*, COUNT(d.servername) as servercount, d.controller
FROM customers C JOIN
     customerdata d
     ON c.id = d.customer
WHERE isVdi = :isVdi AND
      d.controller <=> :controller
GROUP BY d.customer
ORDER BY c.name ASC, c.environment ASC;

关于PHP PDO 准备语句绑定(bind) NULL 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48643967/

相关文章:

php - 循环遍历双重排序表

php - html5 &lt;input type ="file"accept ="image/*"capture ="camera"> display as image 而不是 "choose file"button

php - 已弃用:mysql_connect()

mysql - Mysqli如何先查询特定记录?

php - MySQL:无法在 MySQL View 中插入

php - 如何在多个for循环中处理PDO对象

php - PDO 有问题,但没有错误

php - 如何在不重写 CSS 和 javascript 文件的情况下从 apache .htaccess 获取重写规则?

mysql - 如果在此期间连接丢失,查询是否正确?

PHP PDO 连接失败但没有错误