2014-06-25 301 views
0

我有以下准备好的声明。所有这些都是好的......NULL WHERE子句

$stmt=$conn->prepare('UPDATE t1 SET c1=? WHERE c2=? AND c3!=?'); 
$stmt->execute(array(1,2,3)); 

但现在我想使用相同的一份声明中,但包括在WHERE子句中的NULL值。

$stmt->execute(array(1,NULL,NULL)); 

将此问题解决为UPDATE t1 SET c1=1 WHERE c2=NULL AND c3!=NULL?是不是正确的查询UPDATE t1 SET c1=1 WHERE c2 IS NULL AND c3 IS NOT NULL?我怎么能有一个准备好的语句,它允许WHERE子句中的NULL值和非NULL值?

+0

[Execute PDO with a array containing null values](http://stackoverflow.com/questions/17723839/execute-pdo-with-an-array-containing-null-values) –

+0

@RahilWazir引用的“可能的重复“用于插入NULL。 INSERT或SET不会导致问题,只有WHERE子句。 – user1032531

+1

给个人谁downvoted。请给出原因。 – user1032531

回答

1

你如果包含

WHERE col = ? 

一个SQL查询将自动绑定NULL值的参数转换为

WHERE col IS NULL 

问。

答案是no。如果一个列有一个NULL值,它永远不会等于任何东西。

您需要为此准备不同的查询。

+0

感谢Ollie。我是否理解你在WHERE子句中使用NULL和非NULL时不能使用相同的预处理语句? – user1032531

+0

正确。如果你认为NULL可能会起作用,你需要在你的查询中处理这个,这就是为什么不能过度使用可空列的原因。 – Andrew

+0

再次感谢Ollie。那么,这是一个无赖! – user1032531