PHP PDO Prepared语句绑定NULL值

时间:2018-02-06 13:15:54

标签: php mysql pdo

我正在尝试将SQL查询作为预准备语句运行 - 我尝试绑定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时,它的效果非常好。

最后,我想从变量绑定参数:controller,但是现在我正在尝试直接将NULL写入其中,因为这甚至都不起作用。

我在这里找到了这种方式: How do I insert NULL values using PDO?

我也尝试了PDO::PARAM_NULL以及所有这些 - 没有任何作用。我真的不明白。

感谢任何帮助。

1 个答案:

答案 0 :(得分:6)

这是您的查询:

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 - 安全比较器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;