我已经尝试了几种不同的方法来解决这个问题,但到目前为止还没有解决方案。我收到此错误消息:
“where 子句”中存在未知列“数组”
SELECT * FROM (`Articles`) WHERE `id` IN (Array, Array, Array, Array, Array, Array, Array, Array, Array, Array, Array, Array, Array, Array, Array, Array, Array, Array, Array, Array, Array, Array, Array, Array, Array, Array, Array, Array, Array, Array, Array, Array, Array)
这是我的模型代码:
function getStarNews($user_id) {
$this->db->select('id');
$this->db->where('user_id', $user_id);
$query = $this->db->get('table1');
foreach ($query->result_array() as $id)
{
//echo $id['id']."<br>"; //displays all of the correct ids I am trying to pass to the where_in()
}
$id = $query->result_array();
$this->db->where_in('id', $id); //pass array of 'id' from above query
$data = $this->db->get('Articles');
return $data->result_array();
}
如果我将 id 数组更改为仅包含 1 个值,则 where_in() 子句可以正常工作并输出与单个“id”匹配的数据行。
我已经在堆栈和谷歌上查找了使用 where_in() 的帮助,我认为我的一切都是正确的,或者已经尝试了几种不同的方法来正确传递数组。
编辑:最后我将使用我的控制器输出这些数据:
$this->output->set_output(json_encode($data));
出于测试目的,我只是跳过 JSON 并尝试直接使用 PHP 从模型输出数据。
您尝试传递的数组是多维数组。而是尝试这个:
$ids = 数组(); foreach ($query->result_array() as $id) { $ids[] = $id['id']; } $this->db->where_in('id', $ids);
您无法在没有迭代的情况下展平 query->result_array() 。但是,如果您需要在应用程序中大量处理此类查询,并且安装了 >= PHP 5.3,则可以将以下函数放入 Codeigniter 帮助程序文件(或其他合适的位置)中,以帮助您展平数组:
函数展平(数组$数组){ $返回=数组(); array_walk_recursive($array, function($a) use (&$return) { $return[] = $a; }); 返回$返回; }
在你的情况下,像这样使用它:
$ids = 展平($query->result_array()); $this->db->where_in('id', $ids);