在使用codeigniter构建的查询中的Where_in语句,该字符串应该是一个数组

时间:2018-06-11 16:48:26

标签: php codeigniter mysqli codeigniter-3 where-in

查询的where_in子句中的CodeIgniter问题。

让我们看一下描述问题的查询:

WHERE `table`.`table_row` IN ('7296 ,7314 {and so on});

这是我在CodeIgniter(表达式引擎)中查询的结果

$sql = ee()->db->where_in('table.table_row', $entry_ids);

我的数组$entry_ids是一个字符串,我之前在我的代码中获得了

$entry_ids = $ee->TMPL->fetch_param('e_id');

要处理我的查询应该是:

WHERE `table`.`table_row` IN ('7296' ,'7314' {and so on});

我已经尝试指定我的数组实际上是一个数组,而不是字符串:

$entry_ids[] = $ee->TMPL->fetch_param('e_id');

但实际上,没有任何改变。

2 个答案:

答案 0 :(得分:1)

因此,您有一个以字符串形式存储的ID列表,您希望将其作为IN语句进行查询。

首先将字符串拆分为数组:
如果你的id用字符串分隔:

$id_array = explode(" ", $string_of_ids);

如果您的ID以逗号分隔:

$id_array = explode(",", $string_of_ids);

如果您的ID以逗号和单引号分隔:

$id_array = explode("','", $string_of_ids);

然后你可以将$ id_array传递给你的查询:
如果您的id列的类型为int:

$this->db->where_in('table.table_row', $id_array);

如果您的id列是string类型: 只需在您的ID中添加单引号:

$id_array = "'" . join("','", $id_array) . "'";
$this->db->where_in('table.table_row', $id_array);

然后,如果你的$ string_of_ids包含你的id周围的引号,你可以跳过一步:

$id_array = explode(",", $string_of_ids);

这应该保留你的报价,所以你不必再加入。

答案 1 :(得分:1)

希望这会对您有所帮助:

使用explode将字符串转换为数组

  $string = '7296 ,7314'; // string of ids
  $entry_ids = explode(',', $string);
  //print_r($entry_ids);

  $this->db->where_in('table.table_row',$entry_ids); //use in where clause

工作演示:https://eval.in/1019052

了解更多http://php.net/manual/en/function.explode.php