Where_in 使用 codeigniter 构建的查询中的语句,其字符串应为数组

Where_in statement in a query built with codeigniter with an string that should be an array

查询的 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');

但实际上,什么都没有改变。

因此您将 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 列是字符串类型: 只需在您的 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);

这应该会保留您的报价,因此您不必再次加入。

希望对您有所帮助:

使用 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