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.