使用PHP PDO准备的语句和MySQL选择字段为空的行

我一直在转换应用程序使用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之间的区别,所以如果在你的回答中包含有意义的话,我会非常感谢对这个主题的一些澄清......


原来是这个问题的一些回应的组合:我如何使用PDO插入NULL值? (正如约翰指出的那样)

我需要将我的where子句更改为:

WHERE fieldName is :fieldName;

然后将一个field =>值的数组传递给execute函数:

$binds = array();
foreach ($wheres as $where) {
    $field = $where['field'];
    $value = $where['value'];
    $binds[":$field"] = $value;
}
$stmt->execute($binds);

查询根本无法使用bindValue,即使改变了我的where子句。 有谁知道为什么绑定不起作用,但这种其他方法呢?


不同的问题,但所有的awnsers都在这里:我如何使用PDO插入NULL值?

把它们加起来:

$stmt->bindValue(':param', null, PDO::PARAM_INT); 

应该工作。你也可以使用:

$stmt->execute( array(":param" => NULL));

对于bindparam,你必须给一个变量(不是常量)的值,bindvalue可以使用常量等。


在MySql中,您可以使用查询

select * from atable where isnull(column_name); 

检查空值。

链接地址: http://www.djcxy.com/p/11437.html

上一篇: Selecting rows where a field is null using PHP PDO prepared statements and MySQL

下一篇: java.lang.NoSuchMethodError: javax.xml.ws.WebFault.messageName