【问题标题】:Array to string conversion error数组到字符串转换错误
【发布时间】:2012-07-15 15:50:38
【问题描述】:

我有一个查询,它正在提取 ID 列表。这些 ID 在一个数组中,我需要使用这些 ID 搜索另一个表。我尝试使用 implode 使这些 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));

但这些都不起作用。 (我从来没有听说过join函数)

提前感谢您的帮助。

【问题讨论】:

  • 我认为mysql查询末尾没有''的要求 - 只需在字符串连接后结束查询字符串! +1 查询字符串的样式,我喜欢 ;)
  • 我知道你不需要最后的两个 ' ' 我只是喜欢把它们放在那里因为它对我来说似乎更有条理。
  • 错误提示“数组到字符串转换错误”

标签: php arrays string codeigniter implode


【解决方案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') . ')';

【讨论】:

  • 您需要在子查询中指定一列才能使其正常工作。
【解决方案2】:

我部分同意 Jay 的回答...只需删除该行:

$dataScope[] = $data

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

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

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

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

在你的 where 子句中使用子查询,虽然它们有时确实有它们的位置,但会花费很多开销,尤其是使用 'SELECT *'。永远不要从你的数据库表中要求更多的东西:)

【讨论】:

    猜你喜欢
    • 2015-02-26
    • 2017-12-02
    • 2013-06-23
    • 2013-08-24
    • 1970-01-01
    • 1970-01-01
    • 2019-05-01
    • 2016-09-07
    相关资源
    最近更新 更多