0

我想调用一个PHP函数:

$rights =  $user->recupererDroitCreateur($_SESSION[CODE_USER]);

recupererDroitCreateur 的代码是:

function recupererDroitCreateur($user_id) {
    $ret = array();
    $sSQL = "SELECT cm.class_menu_code
                 FROM menu m
                 LEFT JOIN classe_menu cm
                 ON m.class_menu_code = cm.class_menu_code
                 WHERE m.menu_deleted = 0 AND m.menu_visible = 1 AND cm.class_menu_parent IS NULL AND cm.class_menu_deleted = 0 
                 ORDER BY cm.class_menu_lib, m.menu_titre";
    $this->db->query($sSQL);
    while ( $this->db->next_record() ) {
        $code = $this->db->f('class_menu_code');
        $strMenus = $code.";";
        $this->recupererMenus($code, $code, $user_id, $strMenus);
    }
    return (explode(";", $strMenus));
}

recupererMenus 的代码是:

function recupererMenus($classRoot, $classParentDirect, $user_id, &$menus)
{
    $sSQL1 = "SELECT class_menu_code FROM classe_menu WHERE class_menu_parent = '$classParentDirect' AND class_menu_deleted = 0";
    $this->db->query($sSQL1);
    while ( $this->db->next_record() ) {
        $this->recupererMenus($classRoot, $this->db->f('class_menu_code'), $user_id, $menus);
    }

    $sSQL = "SELECT m.menu_code
             FROM menu m
             LEFT JOIN classe_menu cm
             ON m.class_menu_code = cm.class_menu_code
             WHERE m.menu_deleted = 0 AND m.menu_visible = 1 AND cm.class_menu_parent = '$classParentDirect' AND cm.class_menu_deleted = 0 
             ORDER BY cm.class_menu_lib, m.menu_titre";

    $this->db->query($sSQL);
    while ( $this->db->next_record() ) 
    {
        $menus .= $this->db->f('menu_code').";";
    }
}

在运行时有错误next_record called with no query pending:错误输出告诉导致错误的行,它说对应于该语句的行:while ( $this->db->next_record() ) {,还有指向该语句的行$this->recupererMenus($code, $code, $user_id, $strMenus);

那么我的代码有什么问题?

4

1 回答 1

1

recupererMenus你递归调用recupererMenus. 由于没有传递给 的查询标识符next_record,因此使用多个querys 会造成很大的混乱。当您从递归调用返回时,您将尝试使用next_recordfor a previous获取下一条记录query,但您的数据库框架不知道这..

我不知道您使用的框架,但是您要么必须传递标识符(如果可能的话),要么首先获取所有结果,然后进行递归调用。

于 2012-07-06T11:36:18.990 回答