php - 警告:非法字符串偏移但vardump显示正确的字符串偏移量

时间:2014-10-02 14:26:51

标签: php mysql

在MySQL数据库上完成SELECT查询并对结果应用fetchAssoc()方法后,我在尝试访问foreach循环中的结果时收到警告。这是代码:

$query=$subquery->execute()->fetchAssoc();

foreach($query as $result) {
  if ($result['active'] == 'Y'){  // (this is line 703)
    $page_id = $result['page_id'];  // (this is line 704)
    if (!$package_pages[$page_id] || $package_pages[$page_id] != $page_id) { // line 705
      $pages[] = $page_id;
    }
  }

我插入了var_dump($ query)来检查查询结果。以下是输出的示例:

array (size=3)
'page_name' => string 'Apts & Rentals' (length=14)
'page_id' => string '49' (length=2)
'active' => string 'Y' (length=1)

array (size=3)
'page_name' => string 'Homepage' (length=8)
'page_id' => string '1' (length=1)
'active' => string 'Y' (length=1)

var_dump($ query)

有25个数组输出

以下是警告的示例:

Warning: Illegal string offset 'active' in ads_load() (line 703 of ...
Warning: Illegal string offset 'page_id' in ads_load() (line 704 of ...
Notice: Undefined index: Y in ads_load() (line 705 of ...

为什么抵消'活跃'和' page_id'被标记为非法?

"通知:未定义索引:Y"是因为它没有被用作第705行的索引?

我不相信这是Illegal String Offset within PDO For Each loop的副本。当我意识到上面给出的代码被置于另一个循环中时,问题得到解决,这给出了我每次处理数组而不是单个数组的印象。

1 个答案:

答案 0 :(得分:0)

您正在错误地访问它们 - 您已经拥有一个关联数组,并且您正在尝试循环它,就像它是一个关联数组数组一样。这是您的转储数据结构:

$query = array(
'page_name' => 'Homepage',
'page_id' => '1',
'active' => 'Y' );

您可以直接从$query获得结果,即:

$query=$subquery->execute()->fetchAssoc();

if ($query['active'] == 'Y')
    $page_id = $query['page_id'];
    // ... the rest of your code ...
}

您可以遍历$query的键和值,但由于您对$query数组中的特定值感兴趣,因此没有多大意义。