【发布时间】:2014-11-27 13:45:27
【问题描述】:
在 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 的重复。当我意识到上面给出的代码被放置在另一个循环中时,这个问题得到了解决,这给人的印象是我每次都在处理一个数组而不是单个数组。
【问题讨论】:
-
你需要用
isset检查它们是否存在 -
fetchAssoc()从结果中返回单行数据。你在那个数组上循环并试图访问它的元素,就好像它们本身就是一个数组一样。这意味着$result是一个字符串。第一次是Apts & rentals,下次是49,然后是Y。