Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/255.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 如何使用CodeIgniter的ActiveRecord选择列值不为NULL的行?_Php_Mysql_Codeigniter_Activerecord_Null - Fatal编程技术网

Php 如何使用CodeIgniter的ActiveRecord选择列值不为NULL的行?

Php 如何使用CodeIgniter的ActiveRecord选择列值不为NULL的行?,php,mysql,codeigniter,activerecord,null,Php,Mysql,Codeigniter,Activerecord,Null,我使用CodeIgniter的活动记录类来查询MySQL数据库。我需要在字段未设置为NULL的表中选择行: $this->db->where('archived !=', 'NULL'); $q = $this->db->get('projects'); 仅返回此查询的: SELECT * FROM projects WHERE archived != 'NULL'; 存档字段是日期字段 有没有更好的办法解决这个问题?我知道我可以自己编写查询,但我希望在代码中始终使用

我使用CodeIgniter的活动记录类来查询MySQL数据库。我需要在字段未设置为NULL的表中选择行:

$this->db->where('archived !=', 'NULL');
$q = $this->db->get('projects');
仅返回此查询的:

SELECT * FROM projects WHERE archived != 'NULL';
存档字段是日期字段


有没有更好的办法解决这个问题?我知道我可以自己编写查询,但我希望在代码中始终使用活动记录。

Null不能设置为字符串

where('archived IS NOT NULL', null, false)
$this->db->where('archived IS NOT', null);

当null没有被括在引号中时,它可以正常工作。

活动记录肯定有一些怪癖。当您将数组传递给$this->db->where函数时,它将生成一个为NULL的数组。例如:

$this->db->where(array('archived' => NULL));
产生

WHERE `archived` IS NULL 
奇怪的是,负数不为空时,没有等价物。但是,有一种方法可以产生正确的结果,并且仍然逃避语句:

$this->db->where('archived IS NOT NULL');
产生

WHERE `archived` IS NOT NULL

检查任一列是否为null的一种方法是

$this->db->where('archived => TRUE);
$q = $this->db->get('projects');
在php中,若列有数据,则可以表示为True,否则表示为False 在where命令中使用多个比较并检查列数据是否为空 喜欢吗

下面是我如何在where子句Codeignitor中过滤列的完整示例。最后一个显示非空压缩

$where = array('somebit' => '1', 'status' => 'Published', 'archived ' => TRUE );
$this->db->where($where);

最好使用以下内容:

For不为空:

对于为空:


为了给您提供另一个选项,您可以使用NOT ISNULLarchived作为WHERE过滤器。

Codeigniter通过不带参数的调用生成IS NULL查询:

$this->db->where('column');
生成的查询是:

WHERE `column` IS NULL
WHERE archived IS NOT NULL;
WHERE archived IS NULL;
编码点火器3

仅:

生成的查询是:

WHERE `column` IS NULL
WHERE archived IS NOT NULL;
WHERE archived IS NULL;

$this->db->where'archived IS NOT NULL',NULL,false $this->db->or_其中'end_date为','NULL',false

如果要测试NULL,可以这样做

$this->db->where_exec('archived IS NULL) 
如果要测试,请不要为NULL

$this->db->where_exec('archived IS NOT NULL) 

请注意,当您将第三个参数设置为FALSE时,CodeIgniter将不会尝试使用反勾号保护您的字段或表名。另外值得补充的是,您可以在传递数组参数时使用此参数:whererrayfoo=>bar,archived IS not NULL=>NULL。非常不直观,但有效。@GusDeCooL不确定这是否有效。使用此输出。。。字段不包含空值。公认的答案似乎是正确的方法提供了我所能提供的更多信息。-1因为它不起作用!我尝试了类似的变化:$this->db->where'when_remove is',null;给出了一个数据库错误,并显示生成的查询包含:…WHERE when_remove是按姓氏asc排序的…+1,因为WHERE'archived is NOT NULL'这仍然保护标识符,而接受的答案不保护标识符。我刚刚尝试了这一点,并输出了它生成的SQL:SELECT*FROM`test`WHERE`somebit`=“1”和`status`=“Published”和`sc\u id`=1.检查一个列是否等于1和检查一个列是否不为null是非常不同的。OP正在查找的不是null不是null这是另一个问题的正确答案。您在哪里找到这个whereexec方法?我在CI项目的任何地方都看不到它,在网上也找不到一个提到它名字的资源。请通过文档链接支持此答案。
$this->db->where_exec('archived IS NOT NULL)