我试图从程序代码跳转到PDO类,并且在根据初始查询的结果查询数据库时遇到了问题。PHP PDO在foreach循环内查询
在这个例子中,我有一个子菜单的菜单(id = $parent
),其中的详细信息我查询成功并存储在一个数组中供我访问。然后,我尝试构建一个foreach循环来遍历该初始数组,并再次查询数据库以查找属于每个子菜单的页面。这是这个过程使我失败。
就像一个笔记,连接是好的,查询也顺利工作,没有顺利。我只是用新格式失败(我认为)。
如果有人能指出我要出错的地方,我会很感激。我一直在运行查询内循环while
,但我想foreach
是这次走的路。
守则
function navigation($parent) {
$conn = ConnManager::get('DB');
//initial query to get list of submenus belonging to $parent
try {
$qNAV= $conn->prepare('SELECT ID, Name FROM prm_menu WHERE Parent = :parent');
$qNAV->execute(array('parent' => $parent));
$qNAV->setFetchMode(PDO::FETCH_ASSOC);
$n=$qNAV->fetchAll();
}
catch(PDOException $e) {
echo $e->getMessage();
}
//now I try to cycle through the array and run another query each time.
foreach($n as $menu) {
$id = $menu['ID'];
try{
$qPAGE=$conn->prepare('SELECT ID, Title, URLName, MenuOrder FROM posts
WHERE MenuID = $id AND Status = 1 ORDER BY MenuOrder ASC, ID ASC');
$qPAGE->execute();
$qPAGE->setFetchMode(PDO::FETCH_ASSOC);
while($m= $qPAGE->fetchAll()) {
$menu_item = '<li id="navPage'.$m['ID'].'" class="menu-nav">';
$menu_item.= '<a href="'.$m['URLName'].'">'.$m['Title'].'</a>';
$menu_item.= '</li>';
echo '<div class="menu-nav-wrap">';
echo '<span class="menu-title">'.$menu['Name'].'</span>';
echo '<ul class="menu-list">';
echo $menu_item;
echo '</ul>';
echo '</div>';
}
}
catch(PDOException $e) {
echo $e -> getMessage();
}
}
}
感谢nickb - 在程序上我会尝试加入,但我只是想与PDO的语法去之前,我开始阐述查询本身。不幸的是,上面只是返回每个子菜单的空数组(尽管'$ id'正在填充一个值)。 – Eamonn 2012-08-03 16:22:59
PDO的OOP接口的使用与您使用的查询类型完全没有关系。 – gview 2012-08-03 16:30:40
我明白,我的意思是我希望在学习一种新的,虽然是单独的语法的同时保持一般的简单性高。不过谢谢。 – Eamonn 2012-08-03 16:33:09