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、複数の を使用すると大きな混乱が生じます。再帰呼び出しから戻ると、前の に対してquery次のレコードを取得しようとしますが、DB フレームワークはそれを認識していません。これ..next_recordquery

あなたが使用しているフレームワークはわかりませんが、識別子を渡すか (可能であれば)、最初にすべての結果を取得してから再帰呼び出しを行う必要があります。

于 2012-07-06T11:36:18.990 に答える