Php PDO准备的语句-空

Php PDO准备的语句-空,php,sql,null,pdo,Php,Sql,Null,Pdo,我有一个正在运行的删除查询,但我刚刚意识到当$user\u id为空时(在某些情况下会发生这种情况),该查询不起作用 除了对值何时为null进行不同的查询之外,还有其他解决方法吗?因为显然,让where正确工作的唯一方法是使用user\u id为null而不是user\u id=null。快速or语句解决问题。更改这段代码 $delete = $sql->prepare( "DELETE_FROM 'game_player' where 'id'=? and 'user_id'=?

我有一个正在运行的删除查询,但我刚刚意识到当
$user\u id
为空时(在某些情况下会发生这种情况),该查询不起作用


除了对值何时为null进行不同的查询之外,还有其他解决方法吗?因为显然,让where正确工作的唯一方法是使用
user\u id为null
而不是
user\u id=null

快速or语句解决问题。更改这段代码

$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 */ }
与或运算符混合时,请小心正确插入括号

如果
$user\u id
不是真正的php类型null,而是一个空字符串,则应修改上述内容:

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

我认为IS NULL是干净的,而且更有效
DELETE FROM
    `game_player`
WHERE
    `id` = ?
AND
    (`user_id` = ? OR ? IS NULL)
...
AND
    (`user_id` = ? OR ? = '')