Php codeigniter和where(array)函数中多索引的使用

Php codeigniter和where(array)函数中多索引的使用,php,mysql,codeigniter,Php,Mysql,Codeigniter,当我在codeigniter中使用它时,它只选择最后一个数组索引 $array = array("status !=" => "deleted", "status !=" => "concept"); $this->db->where($array); 结果是: SELECT * FROM (`table`) WHERE `status` != 'concept' 有人知道为什么或者知道更好的方法吗?您的方法应该有效,或者您可以尝试以下方法: $array = arr

当我在codeigniter中使用它时,它只选择最后一个数组索引

$array = array("status !=" => "deleted", "status !=" => "concept");
$this->db->where($array);
结果是:

SELECT * FROM (`table`) WHERE `status` != 'concept'

有人知道为什么或者知道更好的方法吗?

您的方法应该有效,或者您可以尝试以下方法:

$array = array("status !=" => "deleted", "status !=" => "concept");
foreach($array as $k=>$v){
    $this->db->where($k,$v);
}

由于您已经自己找到了原因(您只是覆盖了数组键),因此应该使用以下选项之一:

您可以在第一个参数中将其全部作为字符串传入:

$this->db->where("status != deleted AND status != concept")->get('table');
或者,您可以进行两个单独的方法调用:

$this->db->where("status !=", "deleted")
         ->where("status !=", "concept")
         ->get('table');

第一个更简单,但第二个更安全。

如果所有子句的列都相同,那么与multiple
where()
s相比,一个更好/更简洁的选择将是该方法。 它只做它所说的-创建一个
notin(..)
子句

示例用法:

$this->db->where_not_in('status', $bad_statuses);

此代码段应选择
状态
不等于
已删除
概念
的每一行。这是你想要的吗?“这就是你得到的吗?”约瑟夫更新了我的帖子。目标是拥有
WHERE status!=已删除和状态!=概念
我运行了它,得到了这个:
SELECT*FROM(`table`),其中`status`!='“已删除”和“状态”!='概念“
运行此命令时会得到什么:
$this->db->where(数组(“sta`tus!=”=>“deleted”,“status!=”=>“concept”)->get('table')?您应该会得到一个错误(因为我在那里添加了一个额外的反勾号),但它应该会显示它试图运行的查询…发现了问题!当我创建与前一个相同的第二个数组索引时,它将覆盖旧的数组索引!阵列的异常行为非常正常。不需要这样做。OP的方法是正确的。阅读文档:。转到
$this->db->where(),然后看一看方法3。这是我考虑过的一个选项,但我觉得奇怪的是,它不会像我写的那样工作。奇怪。我想我会按你的方式做是的@Joseph Silber但Mark说他不工作。。。有两件事是可以做到的,最好是尝试这种理论化……好吧,数组的设置不会发生在它自己的模型内部!我从一个配置文件中获取where数组,该配置文件为不同的条件设置不同的where数组。第一个我想我会去的!我可以将配置中的where数组设置为字符串,它仍然可以工作!谢谢