【问题标题】:PHP PDO Prepared statement bind NULL valuePHP PDO Prepared 语句绑定 NULL 值
【发布时间】:2018-02-06 13:15:54
【问题描述】:

我正在尝试将 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 和所有这些东西 - 没有任何效果。我真的不明白。

感谢您的帮助。

【问题讨论】:

  • 对此不太确定,但FROM customers C 此处的大写“C”以及之后使用小写“c”可能是个问题。在 *NIX 操作系统上,它区分大小写。
  • @Syscall OP 已经尝试过,如问题中所述
  • @FunkFortyNiner 虽然我同意这不是很好,但它 100% 不是问题。我现在改了,还是不行。顺便说一句:在我添加 AND d.controller = :controller 部分之前,该查询有效 - 所以这根本不是问题。
  • 这就是我将其作为评论发布的原因 ;-) 我为未来的读者编辑的 @Twinfriends。
  • 只是想知道您是否在查询中使用 PDO 的错误处理。 php.net/manual/en/pdo.error-handling.php - 这可能已经射出一些东西。不过,戈登的回答很有道理,试一试。

标签: php mysql pdo


【解决方案1】:

这是您的查询:

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;

【讨论】:

  • 那行得通,我会在几分钟内接受它。我对这种语法有点困惑,但无论如何我都会接受。这就是我的想法,做一些提示= NULL 不是SQL 的好语法,但我没有看到其他方法。
  • @Twinfriends 。 . . dev.mysql.com/doc/refman/5.7/en/….
  • 非常感谢您的参考;)
猜你喜欢
  • 2012-03-27
  • 1970-01-01
  • 2018-11-17
  • 1970-01-01
  • 2015-07-13
  • 2010-12-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多