2011-01-05 11 views
8

私が実行している削除クエリを持っていますが、ちょうど$user_idは(特定のケースで起こっている)がnullのとき、これは動作しないことに気づきました。PDOプリペアドステートメント - NULLが

$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

私が思うだろうがNULLであり、より効果的に – ajreal

答えて

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

またはオペレータとを混合する際に、適切にかっこに注意してください。きれいにカットがある

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

だこと:

$user_idは本当にPHP型nullではありませんが、言うならば、空の文字列は、次のような上記を変更する必要がありますまともな解決策.. – Ian

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 */ } 
関連する問題