【发布时间】:2015-07-02 14:32:41
【问题描述】:
我的数据库中只有一条记录,“action_taken”列设置为NULL。我到底要如何让 PDO 找到它???
如果我直接在 SQL 中键入查询,它会按预期工作。
注意:这只是一个测试脚本来说明我的问题。大多数时候传递的值是一个字符串,但偶尔会是 NULL。
include ('include/mysql.php');
$sql = 'SELECT * FROM returns WHERE action_taken = :action';
$sth = $dbh->prepare($sql);
$param = null;
$sth->bindValue(':action', $param, PDO::PARAM_STR);
$sth->execute();
if ($sth->rowCount())
{
echo 'FOUND YOU!';
}
else
{
echo 'NOOOO :(';
}
【问题讨论】:
-
你的 where 子句需要看起来像
action_taken IS NULL,action_taken = null无效。 -
你不能测试 null 是否相等。 NOTHING 永远不能等于(或不等于)null。 null 是有毒且具有传染性的。任何涉及空值的操作也会使整个操作变为空。
-
谢谢马克。我以为 PDO 会为我解决这个问题。意味着我需要对每个参数添加检查 NULL 值,然后为每种情况重写查询/绑定参数。非常不方便:(
-
您是否建议更改数据库以使默认值为“”而不是 NULL?