在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的副本。当我意识到上面给出的代码被置于另一个循环中时,问题得到解决,这给出了我每次处理数组而不是单个数组的印象。
答案 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
数组中的特定值感兴趣,因此没有多大意义。