PDO检查字段对准备:param,处理IS NULL条件

时间:2012-09-28 01:04:24

标签: php mysql pdo prepared-statement

我有以下查询:

//query:
$query = "
    SELECT field1 FROM table 
    WHERE 
        field2 = :PARAM1
    AND ...
    AND fieldx = :PARAM1X";

//params:
$params = array();
$params [":PARAM" . $i] = NULL;

//prepare and execute:
$o = $cnx->prepare($query);
$o->execute($params);

我如何用NULL值绑定参数? PDO会自动将= :PARAM1更改为IS NULL吗?为了说清楚,尝试计算WHERE field = null在mysql中不起作用,永远不会返回任何内容。我们必须使用WHERE field IS NULL代替。

这就是我现在正在处理的问题。

我必须说我的第一次测试是积极的,但我真的不想在生产环境中发现6个月的副作用......

2 个答案:

答案 0 :(得分:1)

来自PHP Docs的评论说,

bindValue(':PARAM1', null, PDO::PARAM_INT);

$myNull = null;
$stmt->bindParam(':PARAM1', $myNull, PDO::PARAM_NULL);

答案 1 :(得分:1)

如果你想绑定params将为null值,那么你需要使用bindValues

bindValue(':param', null, PDO::PARAM_INT);

所以对于你的查询,它可以是这样的。

$sth = $dbh->prepare('SELECT field1 FROM table WHERE field2 = :PARAM1 AND fieldx = :PARAM1X');
$sth->bindValue(':PARAM1', null, PDO::PARAM_INT);

希望这会有所帮助。