Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/234.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在PHP PDO查询中使用NULL作为条件_Php_Mysql_Pdo - Fatal编程技术网

在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。