Php无限的儿童菜单,不能用pdo取一些父母

时间:2014-07-31 11:34:36

标签: php mysql pdo menuitem

我在博客中找到了无限制的菜单功能,并尝试将查询从mysql_ *更改为PDO。当mysql_ *查询运行时,菜单将呈现所有子项。但是当我尝试用PDO执行相同的功能时,它不会渲染所有菜单。

数据库结构

id  | name      | link      |   parent_id   
-----------------------------------------
1   | Home      | p.php     |   0
2   | Portfolio | p.php     |   0
3   | Projects  | p.php     |   0
4   | Contact   | p.php     |   0
5   | Web Design| p.php     |   2
6   | Grap. Desg| p.php     |   2
.
.
.
14  | Quote     | p.php     |   6 
.
-----------------------------------------

使用mysql_ * Query;

<?php
$menu_html='';
function render_menu($parent_id){
    global $menu_html;
    $result=mysql_query("select * from menu_options where parent_id=$parent_id");
    if(mysql_num_rows($result)==0) return;

    if($parent_id==0)
        $menu_html.="<ul id=\"menu\">\r\n";
    else
        $menu_html.="\r\n<ul>";

    while($row=mysql_fetch_array($result)){
        $menu_html.="\r\n<li><a href=\"{$row['url']}\">{$row['name']}</a>";
        render_menu($row['id']);
        $menu_html.="</li>";
    }
    $menu_html.="\r\n</ul>";
    return $menu_html;
}
echo render_menu(0);
?>

结果

-Home
-Portfolio
 --Web Design
 --Graphic Design
    -- Quote <- CORRECT RENDER
 --Logo Design
 --Blog Design
-Projects
 --Project1
 --Projects
 --Project2
 --Project3
 --Project4
-Contact
 --Support
 --General Inquiry

但是当我们尝试使用PDO时;

<?php
$menuHtml='';
function createMenu($parentId){
    global $menuHtml;
    global $db;
    $query = $db->prepare('SELECT * FROM menu_options WHERE `parent_id` = ?');
    $query->bindParam(1, $parentId, PDO::PARAM_INT);
    $query->execute();
    $result = $query->fetch(PDO::FETCH_OBJ);
    $rowCount = $query->rowCount();
    if ($rowCount == 0) return;
    if ($parentId == 0)
        $menuHtml.="<ul id=\"menu\">\r\n";
    else
    $menuHtml.='<ul>';
    while($row = $query->fetch(PDO::FETCH_OBJ))
    {
        $menuHtml.='<li><a href="'.$row->url.'">'.$row->name.'</a>';
        createMenu($row->id);
        $menuHtml.='</li>';
    }   
$menuHtml.='</ul>';
return $menuHtml;
}
echo createMenu(0);
?>

结果;

-Portfolio
 --Graphic Design
 --Logo Design
 --Blog Design
-Projects
 --Project2
 --Project3
 --Project4
-Contact
--General Inquiry

某些parent_id = 0未呈现且许多菜单未呈现。 我错过了什么?我的PDO查询有什么问题? 任何帮助都会大大增加。

2 个答案:

答案 0 :(得分:1)

您可能会在获得行数之前添加一行。这是获取第一个结果行,然后你什么都不做?

尝试删除标有---&gt;

的行
<?php
$menuHtml='';
function createMenu($parentId){
    global $menuHtml;
    global $db;
    $query = $db->prepare('SELECT * FROM menu_options WHERE `parent_id` = ?');
    $query->bindParam(1, $parentId, PDO::PARAM_INT);
    $query->execute();
--->    $result = $query->fetch(PDO::FETCH_OBJ);
    $rowCount = $query->rowCount();
    if ($rowCount == 0) return;
    if ($parentId == 0)
        $menuHtml.="<ul id=\"menu\">\r\n";
    else
    $menuHtml.='<ul>';
    while($row = $query->fetch(PDO::FETCH_OBJ))
    {
        $menuHtml.='<li><a href="'.$row->url.'">'.$row->name.'</a>';
        createMenu($row->id);
        $menuHtml.='</li>';
    }   
$menuHtml.='</ul>';
return $menuHtml;
}
echo createMenu(0);
?>

答案 1 :(得分:1)

你用这一行诋毁你父母的每个第一个孩子:

$result = $query->fetch(PDO::FETCH_OBJ);

摆脱它,它会正常工作