【发布时间】:2012-11-01 10:25:54
【问题描述】:
我一直在将应用程序转换为使用 PDO 准备语句而不是 mysqli,我遇到了一个奇怪的问题。我在数据库中有一些记录,预计字段将为空。不是'null'(字符串)或''(空字符串),而是NULL。我动态构建查询,所以过去当我在对象中遇到空变量时,我会像这样构建查询:
WHERE fieldName is null;
当字段为空时会得到预期的结果。
现在使用 PDO,我的查询没有返回任何结果,也没有收到任何错误。它只是没有返回我期望的记录。当我回显构建的查询并直接在 MySQL 中运行它们时,我得到了预期的结果,但在应用程序中没有返回结果。
我尝试过的一些事情包括构建如下所示的查询:
WHERE fieldName is null;
或
WHERE fieldName <=> null;
我也尝试过以下标准准备语句:
WHERE fieldName = :fieldName
然后绑定这些类型的语句:
$stmt->bindParam(":$field", $value);
$stmt->bindParam(":$field", $value, PDO::PARAM_NULL);
$stmt->bindParam(":$field", null, PDO::PARAM_NULL);
$stmt->bindValue(":$field", null, PDO::PARAM_NULL);
$stmt->bindValue(":$field", null, PDO::PARAM_INT);
对此的任何帮助将不胜感激。我的 PHP 版本是 5.3.10,MySQL 是 5.5.22。作为一个附带问题,我仍然不清楚 bindParam 和 bindValue 之间的区别,所以如果包含在你的答案中是有意义的,我将非常感谢你对这个主题的一些澄清......
【问题讨论】:
-
不同的问题,但所有的遮阳篷都在这里:stackoverflow.com/questions/1391777/…
-
我已经尝试了该问题的所有不同建议,但到目前为止都没有奏效......
-
如果你在null上插入或搜索,为什么需要参数化呢?
-
@MikeBrant 因为您想搜索一个有时为空、有时不是的字段...
WHERE field=:value和 :value 可能为空或不为空
标签: php mysql pdo prepared-statement