2011-01-05 61 views
8

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

$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 ...

+0

我想IS NULL是干净的切割,并更有效地 – ajreal 2011-01-05 02:47:08

回答

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

运营商混合时要小心,以正确的括号。

如果$user_id是不是真的PHP类型null,但说,一个空字符串,你应该修改上面这样:

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

这是一个像样的解决 – Ian 2011-01-06 04:05:18

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 */ }