echo "<nav id=\"gropCntl\"><ul>";
$res = $db->query("SELECT * FROM category WHERE shop_id=?; ", array($shop_id));
if (PEAR::isError($res)) {die("カテゴリー・抽出エラー:");}
while ($row = $res->fetchRow(DB_FETCHMODE_ASSOC)) {
echo "<li class=\"naviMenu\" onmouseover=\"this.className='naviMenu_on'\"
onmouseout=\"this.className='naviMenu'\">
<a href=\"\">".htmlspecialchars($row["cate_name"],ENT_QUOTES)."</a>";
echo "<ul class=\"sub\">";
$res = $db->query("SELECT * FROM m_group WHERE g_cate_id=? AND shop_id=?",
array(htmlspecialchars($row["cate_id"],ENT_QUOTES), $shop_id));
if (PEAR::isError($res)) {die("グループ・抽出エラー:");}
while ($row = $res->fetchRow(DB_FETCHMODE_ASSOC)) {
echo "<li><a href=\"\">".htmlspecialchars($row["group_name"],ENT_QUOTES)."</a></li>";
}
echo "</ul></li>";
}
echo "</ul></nav>";
厳密に言うとPHPの話では無いのですが
データベースハンドル$dbを一つで行ってるからです
入れ子にする場合は2カーソルで行うべきです
$db = connectDb();
$db2 = connectDb();
$res1=$db->query(...);
while ($row=$res->fetch()){
......
$res2= $db2->query(....);
while ($row2=$res2->fetch()) {
.....
}
}
こんな感じかな
厳密に言うとPHPの話では無いのですが
データベースハンドル$dbを一つで行ってるからです
入れ子にする場合は2カーソルで行うべきです
$db = connectDb();
$db2 = connectDb();
$res1=$db->query(...);
while ($row=$res->fetch()){
......
$res2= $db2->query(....);
while ($row2=$res2->fetch()) {
.....
}
}
こんな感じかな
早速のご返信、ありがとうございます!解決いたしました。
そのような理由だったんですね…たいへん勉強になりました!
$resの使いまわしが原因ですね。
変数を分けるか、
echo "<nav id=\"gropCntl\"><ul>"; $res1 = $db->query("SELECT * FROM category WHERE shop_id=?; ", array($shop_id)); if (PEAR::isError($res1)) {die("カテゴリー・抽出エラー:");} while ($row = $res1->fetchRow(DB_FETCHMODE_ASSOC)) { echo "<li class=\"naviMenu\" onmouseover=\"this.className='naviMenu_on'\" onmouseout=\"this.className='naviMenu'\"> <a href=\"\">".htmlspecialchars($row["cate_name"],ENT_QUOTES)."</a>"; echo "<ul class=\"sub\">"; $res2 = $db->query("SELECT * FROM m_group WHERE g_cate_id=? AND shop_id=?", array(htmlspecialchars($row["cate_id"],ENT_QUOTES), $shop_id)); if (PEAR::isError($res2)) {die("グループ・抽出エラー:");} while ($row = $res2->fetchRow(DB_FETCHMODE_ASSOC)) { echo "<li><a href=\"\">".htmlspecialchars($row["group_name"],ENT_QUOTES)."</a></li>"; } echo "</ul></li>"; } echo "</ul></nav>";
こんな感じで、関数とかで逃げるとか。
echo "<nav id=\"gropCntl\"><ul>"; $res = $db->query("SELECT * FROM category WHERE shop_id=?; ", array($shop_id)); if (PEAR::isError($res)) {die("カテゴリー・抽出エラー:");} while ($row = $res->fetchRow(DB_FETCHMODE_ASSOC)) { echo "<li class=\"naviMenu\" onmouseover=\"this.className='naviMenu_on'\" onmouseout=\"this.className='naviMenu'\"> <a href=\"\">".htmlspecialchars($row["cate_name"],ENT_QUOTES)."</a>"; outputGroup($row['cate_id'], $shop_id); } echo "</ul></nav>"; function outputGroup($category_id, $shop_id) { echo "<ul class=\"sub\">"; $res = $db->query("SELECT * FROM m_group WHERE g_cate_id=? AND shop_id=?", array(htmlspecialchars($category_id,ENT_QUOTES), $shop_id)); if (PEAR::isError($res)) {die("グループ・抽出エラー:");} while ($row = $res->fetchRow(DB_FETCHMODE_ASSOC)) { echo "<li><a href=\"\">".htmlspecialchars($row["group_name"],ENT_QUOTES)."</a></li>"; } echo "</ul></li>"; }
何かの参考になれば。
早速の返信、ありがとうございます。関数で逃げるっていう方法もあるんですね。無事に解決しました。ご教授ありがとうございます!たいへん、勉強になりました。
関数で逃げるというのが正しい表現ではないですが、関数内は変数のスコープが変わるので、同名でも違う変数として扱われるために、こういった回避も可能です。
早速のご返信、ありがとうございます!解決いたしました。
2012/03/02 18:16:19そのような理由だったんですね…たいへん勉強になりました!