这是一个参数化查询:
SELECT
field1,field2,etc1,etc2
FROM my_table WHERE
conditionA=:conditionA AND
conditionB=:conditionB
和我的参数:
array( 'conditionA'=> 5, 'conditionB'=>NULL )
现在在这个理论案例中,conditionB
可以是一个值,也可以是null。但是在SQL中,你没有说conditionB=NULL
- 你写的是“conditionB IS NULL
”。
我该怎么做?首先,如果我在我的参数中传递'conditionB'=>NULL
,那么我假设该节点根本没有通过。其次,我是否需要根据conditionB
的类型值重写“=”和“IS”之间的查询,或者PDO也能为我做这个吗?
答案 0 :(得分:0)
Mysql处理NULL
的方式与cannot use common comparison operators甚至STRCMP()
doesn't do what you need不同。
当我需要在字符串上实现a != b
时,我最终使用(a IS NULL XOR b IS NULL) OR (a != b)
...
所以我认为你可以implement 2 different queries based on condition 或延长你的条件
WHERE conditionA=:conditionA
AND (
(conditionB IS NULL AND :conditionB IS NULL) OR (conditionB=:conditionB)
)