PDO准备语句 - NULL

时间:2011-01-05 02:00:25

标签: php sql null pdo

我有一个正在运行的删除查询,但只是意识到当$user_id为空时(在某些情况下会发生这种情况)这不起作用。

$id = 1;
$user_id = null;
$delete = $sql->prepare("
    DELETE FROM
        `game_player`
    WHERE
        `id` = ?
    AND
        `user_id` = ?
");
if ($delete->execute(array(
    $id,
    $user_id,
));

除了在值为null时对其进行不同的查询以外,是否还有其他工作,因为显然唯一的方法是使用user_id IS NULL代替user_id = NULL ...

2 个答案:

答案 0 :(得分:6)

DELETE FROM
    `game_player`
WHERE
    `id` = ?
AND
    (`user_id` = ? OR ? IS NULL)

运算符混合时,请小心使用括号。

如果$user_id不是真正的php类型为null,而是说一个空字符串,则应该修改上面的内容:

...
AND
    (`user_id` = ? OR ? = '')

答案 1 :(得分:0)

快速或陈述解决了这个问题。改变这段代码。

$delete = $sql->prepare(
    "DELETE_FROM 'game_player' where 'id'=? and 'user_id'=?;");
if ($delete->execute(array(
    $id,
    $user_id
));

更像以下内容。

$delete = $sql->prepare(
    "DELETE_FROM 'game_player' where ('id'=? and 'user_id'=?) 
                                  or ('id'=? AND 'user_id' IS NULL)");
if ($delete->execute(array(
    $id,
    $user_id,
    $id
))) { /* success */ }