• User Attivo

    [PHP - OOP] Semplice classe OOP mi inchioda Firefox

    Ciao,
    ho una classe che dovrebbe gestirmi la connessione al db ed eseguire delle semplici query. Al momento il codice l'ho strutturato come segue (notate il while commentato):
    [PHP]
    class Cnt{
    private $_result;
    const HOST = 'localhost';
    const USER = 'root';
    const PASS = '';
    const DB = 'prova';
    private $_cnt = FALSE;

        function __construct(){
            $this->_cnt = mysqli_connect(self::HOST, self::USER, self::PASS, self::DB);
            if(!$this->_cnt) die('Non connesso');
            mysqli_query($this->_cnt, "set names 'utf8'");
        }
    
    
    function query($query){
        $this->_result = mysqli_query($this->_cnt, $query);
        return $this->_result;
    }
    
    function __destruct(){
        mysqli_free_result($this->_result);
        mysqli_close($this->_cnt);
    }
    

    }

    $cnt = new Cnt;

    $query = 'SELECT DISTINCT nome FROM utenti';
    $a = $cnt->query($query);
    $b = mysqli_fetch_assoc($a);
    //while($b){
    echo $b['nome'];
    //}
    [/PHP]
    La colonna "nome" utenti ha solo 4 record, di cui solo 1 duplicato. In teoria dovrebbe quindi restituirmi 3 nomi.
    Il problema sorge quando decommento il while. Il browser si blocca, la RAM va in saturazione e dopo un po' Firefox viene chiuso automaticamente con il classico avviso del crash dell'applicazione.
    Per carità... la classe sarà pure fatta male, ma non mi sembra sia un calcolo così complesso da aver bisogno di 4 GB di ram!
    Dov'è l'inghippo secondo voi?


  • ModSenior

    Ciao,
    php è lato server ovviamente, quindi con la problematica di firefox in pratica c'entra pochissimo. L'unico modo per inchiodare il browser è mandargli in echo una marea di testo.


  • User Attivo

    Lo so... è per quello che non capisco il motivo del blocco. Tu vei qualche errore nel codice che potrebbe giustificarlo?


  • ModSenior

    Non sò se hai editato ora il post o se non avevo visto io la parte finale prima, comunque adesso si vede benissimo che il ciclo è sbagliato, ed è infinito per cui hai un echo continuo di testo che porta al blocco del browser.
    Devi fare cosi:

    
    
    while($b = mysqli_fetch_assoc($a))
    {
        echo $b['nome'];
    }  
    
    

  • User Attivo

    Eh... vedi che l'errore c'era?! :fumato:
    Sono quelle stupidaggini che fanno perdere le ore!
    Grazie, ora funziona.