数组字符串转换错误(Array to string conversion error)

2019-09-19 13:58发布

我有一个在捉弄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));

但这些都不工作。 (我从来没有听说过的连接功能)

先谢谢您的帮助。

Answer 1:

$dataScope[] = $data;

$data[] = $scope;

因此$dataScope有一个数组内它的阵列。 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') . ')';


Answer 2:

我部分地与周杰伦的答案同意...只是删除行:

$dataScope[] = $data

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

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

然而,你也应该使用(和)你的WHERE子句中:

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

在where子句中使用子查询,虽然他们也有自己的位置,有时,可能花费大量的开销,尤其是在使用“SELECT *”。 决不更多的要求比你从你的数据库表需要:)



文章来源: Array to string conversion error