Visualizzazione dei risultati da 1 a 2 su 2

Discussione: debuggare ricorsione

  1. #1
    Utente di HTML.it
    Registrato dal
    May 2003
    Messaggi
    682

    debuggare ricorsione

    Salve a tutti. Volevo chiedere a qualcuno un suggerimento circa l'utilizzo delle ricorsioni.
    Praticamente ho notato che quando utilizzo le ricorsioni con una classe da me scritta per mysql
    perdo la risorda al db o comunque non riesco a recuperare i dati.
    C'é qualcuno che mi riesce a dare un suggerimento visto che non riesco a debuggare questa cosa.
    Ho una funzione come questa che richiama se stessa per creare un menu ad albero.
    function listCategory
    Codice PHP:
    <?php
    error_reporting
    (E_ALL);

    require_once(
    'includes/settings.inc.php');
    require_once(
    'includes/database.inc.php');

    $_db  = new Db($_dbUrl$_dbPrefix);
    $_db2 = new Db($_dbUrl$_dbPrefix);

    function 
    listCategory($node)
    {
        global 
    $_db$_db2;
        
        
    $sql "SELECT id, nome_categoria, subcategory FROM {category} WHERE subcategory = '%d'";
        
    $_db->dbExecQuery($sql, array($node), true);
        
        if (
    $_db->dbIsError()) {
            
    trigger_error($_db->dbGetError(), E_USER_ERROR);
        }
        
        while (list(
    $id$name$sub) = $_db->dbFetchArray()) {
            
    //find subgroup category
            
    $sql2 "SELECT id FROM {category} WHERE subcategory = '%d'";
            
    $_db2->dbExecQuery($sql2, array($id), true);
            
            if (
    $_db2->dbIsError()) {
                
    trigger_error($_db2->dbGetError(), E_USER_ERROR);
            }
            
            
    $num_record $_db->dbGetNumRows();
            
            if (
    $num_record) {
                echo 
    $name '
    '
    ;
                echo 
    listCategory($id);
            } else {
                echo 
    $name '
    '
    ;
            }
        }
    }

    listCategory(0);
    Con questa funzione richiamo dalla tabell category i campi id, nome e subcategory.
    Nel campo subcategory inserisco 0 se il record rappresenta un nodo parent e le categorie
    figlie prendono per il campo subcategory l'id del campo parent con subcategorry appunto 0.
    Praticamente il problema é nella chiamata ricorsiva in quanto non riesco a prendere tutti i dati.
    Recupero solo il primo record ed il primo record figlio di questo nodo estratto.

    Provo a mostrarvi i dati della classe Db:

    Codice PHP:
    /**
         * Execute the sql query 
         *
         * @param string sql query 
         * @param array of param to parse with the query
         * @return resource
         */
        
    function dbExecQuery($query$param = array(), $mode true$debug false)
        {
            
    $args func_get_args();
            
    $query $this->_dbPrefixTables($query);
            if (
    count($args) > 1) {
                if (
    is_array($args[1])) {
                    
    $args array_merge(array($query), $args[1]);
                    
    $args array_map(array($this'_dbEscapeString'), $args);
                    
    $args[0] = $query;
                    
    $query call_user_func_array('sprintf'$args);
                }
            }
            
            if (
    $debug) echo  '<pre>' $query '</pre>';
            
    $this->_dbExecQuery($query$mode);
        }

        
    // }}}
        // {{{ dbExecQuery()
        
        /**
         * Helper function for dbExecQuery
         * @param the query string to parse
         * @param the mode to define the type of query executed
         * @return mixed value boolean/resource
         */
        
    function _dbExecQuery($query$mode)
        {
            if (
    $mode) {
                
    $resource mysql_query($query$this->_dbLink);
                if (
    is_resource($resource)) {
                    
    $this->_dbResource $resource;
                }else {
                    
    $this->_dbGetError();
                }
            }
            
            if (
    $mode == false) {
                if (!(
    mysql_query($query$this->_dbLink))) {
                    
    $this->_dbGetError();
                }
            }
        }
        
        
    // }}}
        // {{{ dbFetchArray()
        
        /**
         * Return data from a resulset 
         * @param constant MYSQL_BOTH | MYSQL_NUM | MYSQL_ASSOC
         * @return array array of data
         */
        
    function dbFetchArray($mode MYSQL_BOTH
        {    
            if (
    $this->_dbResource) {
                return 
    mysql_fetch_array($this->_dbResource$mode);
            }
        } 
    Spero di essere stato chiaro. Vorrei capire il problema, anche se fra un pò passero
    nested sets :P.
    Grazie e buon lavoro a tutti.

  2. #2
    Utente di HTML.it
    Registrato dal
    May 2003
    Messaggi
    682
    Ragazzi nessuno mi sa dare un input ? Ho dato un occhiate alle altre classi php stile 4
    ma sembrano che il metodo per ritornare valori sia lo stesso, a conti fatti é solo un wrap per mysql_fetch_array.
    Qui ho postato la classe completa:
    http://phpfi.com/229087
    Qui ho inserito il codice della funzione.
    http://phpfi.com/229088

    A questo punto mi sto incaponendo visto che se c'é un bug nella classe vorrei capire il perché.
    Grazie a tutti in anticipo.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.