数组到字符串的转换错误


Array to string conversion error

我有一个查询,它正在提取一个ID列表。这些ID在一个数组中,我需要用这些ID搜索另一个表。我尝试使用内爆使这些ID成为一个字符串,可以在where子句中使用,但我一直收到这个错误。

我当前的代码是:

 $query = $this->db->query('
        SELECT *
        FROM system_scoperights
        WHERE user = '. $this->session->userdata('username') .'
    ');
    foreach ($query->result() as $row) {
        $scope = $row->site;
        $data[] = $scope;
    } 
    $dataScope[] = $data;
    $idList = implode(',', $dataScope);   <---- Error Line
    $where = 'WHERE scope_scopes.sc_ID IN '. $idList .'';

我在论坛上尝试过不同的东西,比如:

 $idList = implode(',', array_values($dataScope));

 $idList = implode(',', join($dataScope));

但这些都不起作用。(我甚至从未听说过联接函数)

提前感谢您的帮助。

$dataScope[] = $data;

但是

$data[] = $scope;

因此CCD_ 1在其阵列内具有阵列。implode只能在一个级别上工作,因此您会出现此错误。

您应该注意,这实际上在SQL:中是可能的

 SELECT * FROM some_table WHERE id IN (SELECT site FROM another_table WHERE ... )

这将消除对该代码的全部需要。

即:

$where = 'WHERE scope_scopes.sc_ID IN (SELECT site
                                       FROM system_scoperights
                                       WHERE user = '. $this->session->userdata('username') . ')';

我部分同意周的回答。。。只需删除行:

$dataScope[] = $data

并直接使用$data变量,因为它已经是一个数组:

$idList = implode(',', $data);

但是,您也应该在where子句中使用(和):

$where = 'WHERE scope_scopes.sc_ID IN (' . $idList . ')';

在where子句中使用子查询,尽管它们有时确实有自己的位置,但可能会花费大量开销,尤其是使用"SELECT*"。永远不要从数据库表中要求超过您需要的内容:)