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 ? = '')