手続き型コードから PDO クラスにジャンプしようとしていますが、最初のクエリの結果に基づいて DB をクエリするときに問題が発生しました。
この例では、サブメニューのメニュー (id = $parent
) があり、その詳細は正常にクエリされ、アクセスできるように配列に格納されます。次に、foreach ループを形成して最初の配列を循環させ、DB に再度クエリを実行して、各サブメニューに属するページを見つけようとします。ここでプロセスが失敗します。
注意点として、接続は問題なく、クエリも手続き的に問題なく動作します。私は単に新しいフォーマットで失敗しているだけです (と思います)。
誰かが私が間違っているところを指摘できれば、私は感謝します。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();
}
}
}