我正在尝试将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();
Run Code Online (Sandbox Code Playgroud)
但这不起作用.我得到一个空结果数组.当我更换controller = :controller用controller IS NULL它完美.
最后,我想将变量绑定到:控制器,但是现在我正在尝试直接将NULL写入其中,因为这甚至不起作用.
我在这里找到了这种方式: 如何使用PDO插入NULL值?
我也已尝试过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;
Run Code Online (Sandbox Code Playgroud)
不幸的是,任何事情= NULL永远都不会真实.更不幸的是,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;
Run Code Online (Sandbox Code Playgroud)