在PHP PDO查询中使用NULL作为条件
以下是一个参数化查询:在PHP PDO查询中使用NULL作为条件,php,mysql,pdo,Php,Mysql,Pdo,以下是一个参数化查询: SELECT field1,field2,etc1,etc2 FROM my_table WHERE conditionA=:conditionA AND conditionB=:conditionB 以及我的参数: array( 'conditionA'=> 5, 'conditionB'=>NULL ) 在这个理论案例中,条件B可以是一个值,也可以是null。但是在SQL中,您并没有说conditionB=NULL,而是说conditionB为NULL
SELECT
field1,field2,etc1,etc2
FROM my_table WHERE
conditionA=:conditionA AND
conditionB=:conditionB
以及我的参数:
array( 'conditionA'=> 5, 'conditionB'=>NULL )
在这个理论案例中,条件B可以是一个值,也可以是null。但是在SQL中,您并没有说conditionB=NULL,而是说conditionB为NULL
我该怎么做?首先,如果我在参数中传递'conditionB'=>NULL,那么我假设节点根本没有传递。其次,我是否需要根据conditionB的类型值重写=和之间的查询,或者PDO也可以为我这样做?Mysql处理NULL的方式不同,您甚至可以
当我需要实现时!=在字符串上,我最终使用的是a IS NULL XOR b IS NULL或a!=b、
所以我想你也可以
或者把你的病情扩大到
WHERE conditionA=:conditionA
AND (
(conditionB IS NULL AND :conditionB IS NULL) OR (conditionB=:conditionB)
)
这是最好的答案,但我必须说,我认为这是PDO的一个缺点,可以让事情变得更简单。这在我看来是相当常见的事情think@SamuelFullman我想这是MySQL的事情。。。您可以自己编写布尔函数来正确比较项,而无需编写所有的XOR、OR、and、ISNull等内容。。。但我认为索引在这方面不起作用。。。MySQL使用NULL:-/整个conditionB为NULL且:conditionB为NULL或conditionB=:conditionB段可以缩短为conditionB:conditionB。