Php 将逗号分隔列表从控制器传递到模型

Php 将逗号分隔列表从控制器传递到模型,php,mysql,codeigniter,activerecord,Php,Mysql,Codeigniter,Activerecord,我正在使用Codeigniter,并试图将一个逗号分隔的列表从我的控制器传递给模型,以便在查询中使用它。我有以下代码来创建逗号分隔列表 $mnames = Array(); foreach($facet_group['manufacturer_name'] as $u) $mnames[] = $u['value']; $manufacturer_list = implode(",",$mnames); 该公司生产以下产品:阿尔卡特、苹果、华为、LG、微软、摩托罗拉、诺基亚、三星、索尼。我的问

我正在使用Codeigniter,并试图将一个逗号分隔的列表从我的控制器传递给模型,以便在
查询中使用它。我有以下代码来创建逗号分隔列表

$mnames = Array();
foreach($facet_group['manufacturer_name'] as $u) $mnames[] = $u['value'];
$manufacturer_list = implode(",",$mnames);
该公司生产以下产品:阿尔卡特、苹果、华为、LG、微软、摩托罗拉、诺基亚、三星、索尼。我的问题是:

$this->db->select('name');
$this->db->from('wl_manufacturers');
$this->db->where('active', 1);
$this->db->where('supplier_type', 'product');
$this->db->where_not_in('name', $str);
$str是逗号分隔的列表

探查器的输出为:

SELECT `name`
FROM `wl_manufacturers`
WHERE `active` = 1
AND `supplier_type` = 'product'
AND `name` NOT IN('Alcatel,Apple,Huawei,LG,Microsoft,Motorola,Nokia,Samsung,Sony')
SELECT `name`
FROM `wl_manufacturers`
WHERE `active` = 1
AND `supplier_type` = 'product'
AND `name` NOT IN('Alcatel', 'Apple', 'Huawei', 'LG', 'Microsoft', 'Motorola', 
'Nokia', 'Samsung', 'Sony')
这似乎不起作用,因为列表中的每个项目都没有单引号。但是,如果我像这样手动创建列表:$array=array('Alcatel','Apple','Huawei','LG','Microsoft','Motorola','Nokia','Samsung','Sony')。它工作正常,探查器的输出为:

SELECT `name`
FROM `wl_manufacturers`
WHERE `active` = 1
AND `supplier_type` = 'product'
AND `name` NOT IN('Alcatel,Apple,Huawei,LG,Microsoft,Motorola,Nokia,Samsung,Sony')
SELECT `name`
FROM `wl_manufacturers`
WHERE `active` = 1
AND `supplier_type` = 'product'
AND `name` NOT IN('Alcatel', 'Apple', 'Huawei', 'LG', 'Microsoft', 'Motorola', 
'Nokia', 'Samsung', 'Sony')
在将其传递给模型之前,我尝试将单引号添加到逗号分隔的列表项中:

$str = "'" . implode ( "', '", $mnames ) . "'";
但探查器的输出是:

SELECT `name`
FROM `wl_manufacturers`
WHERE `active` = 1
AND `supplier_type` = 'product'
AND `name` NOT IN('\'Alcatel\', \'Apple\', \'Huawei\', \'LG\', \'Microsoft\', 
\'Motorola\', \'Nokia\', \'Samsung\', \'Sony\'')

由于添加了反斜杠,因此再次无效。因此,问题是如何创建逗号分隔的列表,将其传递给我的模型并使查询正常工作?

您需要分解逗号分隔的字符串($str)来创建数组

$arr=explode (',',$str)
然后您可以在查询中使用它,如

$this->db->where_not_in('name', $arr);
见:
而CI的

似乎
$this->db->where\u not\u in
需要一个值数组。。。或者,如果传入一个字符串,则与传入一个由一个项组成的数组相同,即字符串

因此,如果您从一个数组开始,只需将其传递到
中,其中不在
中。但是,如果您从CSV字符串开始,那么
str\u getcsv(my\u string\u of\u CSV)
可以将数组传递到
中,其中不在


注意:如果CSV字符串可能包含空格、转义字符和/或引号,则需要使用
str_getcsv
,而不仅仅是
explode
。请参阅:

谢谢,在您回答之后,我注意到我将逗号分隔的字符串传递给查询,而不是数组