Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    Malfunzionamento su fetch_assoc

    ciao a tutti,
    stavo facendo una classe che estende mysqli
    e nell'implementazione del metodo che dovrebbe fare da wrapper a mysqli_result_fetch_assoc()
    ho un comportamento sbagliato che non riesco a correggere.
    riducendo all'osso il codice ecco quello che ho scritto.
    codice:
    <?
    
    class db extends mysqli
    {
    	public $result;
    	public $db_row;
    	public $sql;
    	
    [...]
    	public function db_query()
    	{
    		if($this->sql == "")
    			die("Stringa SQL vuota!");
    		$this->result = parent::query(parent::real_escape_string($this->sql));
    		if($this->result === FALSE)
    		{
    			die('Errore nella query '.msqli_error());
    			return false;
    		}
    		else
    			return true;
    	}
    	
    	public function db_fetch()
    	{
    
    		$this->db_row = $this->result->fetch_assoc();
    	}
    	
    }
    ?>
    se lo utilizzo in maniera ortodossa e cioè così, non funziona
    codice:
    $ldb = new db;
    $ldb->sql = "SELECT * FROM usrusers;";
    $ldb->db_query();
    while($ldb->db_fetch())
    	echo "
    
    ".$ldb->db_row['usrlogin']." - ".$ldb->db_row['usrpwd']." - ".$ldb->db_row['usrlabel']."</p>";
    se lo utilizzo così e cioè senza usare il mio metodo di db_fetch() invece funziona
    codice:
    $ldb = new db;
    $ldb->sql = "SELECT * FROM usrusers;";
    $ldb->db_query();
    while($row = $ldb->result->fetch_assoc())
    echo "
    
    ".$row['usrlogin']." - ".$row['usrpwd']." - ".$row['usrlabel']."</p>";
    sulla pagina quando uso la versione ortodossa non mi dà nessun errore.
    semplicemente non stampa niente
    cosa sbaglio?

    grazie mille in anticipo a tutti
    cyb
    Teologia: l'arte di argomentare l'inesistente per mezzo dell'insostenibile.

  2. #2
    Utente di HTML.it L'avatar di Grino
    Registrato dal
    Oct 2004
    Messaggi
    739
    Guardando un po' il codice mi vien da chiedere:
    codice:
    parent::real_escape_string($this->sql)
    Cos'è questo? Sei sicuro vada utilizzato così?

    codice:
    die('Errore nella query '.msqli_error());
    return false;
    a che serve la return se invochi la die?

    codice:
    while($ldb->db_fetch())
    Come fa a funzionare questa roba se db_fetch non ritorna nulla? Quando finisce/ripete il ciclo?

    Ti dirò di più, dato che non ritorna nulla la condizione mancante forse è interpretata come false ed essendo ripetuto il ciclo while su condizione true, il ciclo non è eseguito neanche una volta ecco perchè non ti appare nulla.


    Siamo sempre troppo gelosi delle nostre grandi piccole opere! - Grino inedito.
    Lavori e Lavoretti

  3. #3
    Utente di HTML.it L'avatar di luca200
    Registrato dal
    Apr 2002
    Messaggi
    4,120
    Il tuo metodo db_fetch() non restituisce nulla...

  4. #4
    Originariamente inviato da Grino
    Guardando un po' il codice mi vien da chiedere:
    codice:
    parent::real_escape_string($this->sql)
    Cos'è questo? Sei sicuro vada utilizzato così?
    richiama il metodo real_escape_string sulla stringa sql della classe ereditata mysqli.
    vengo da .net, lì si adopererebbe così, ma ancora non l'ho testato, per cui no, non sono assolutamente sicuro.
    codice:
    die('Errore nella query '.msqli_error());
    return false;
    a che serve la return se invochi la die?
    a niente, è un refuso. grazie!

    codice:
    while($ldb->db_fetch())
    Come fa a funzionare questa roba se db_fetch non ritorna nulla? Quando finisce/ripete il ciclo?

    Ti dirò di più, dato che non ritorna nulla la condizione mancante forse è interpretata come false ed essendo ripetuto il ciclo while su condizione true, il ciclo non è eseguito neanche una volta ecco perchè non ti appare nulla.


    sì sì è proprio lì l'errore. ora l'ho fatto ritornare e funziona tutto.
    scusate mi ero incaponito e non vedevo una cosa semplice.

    grazie mille!
    Teologia: l'arte di argomentare l'inesistente per mezzo dell'insostenibile.

  5. #5
    Originariamente inviato da luca200
    Il tuo metodo db_fetch() non restituisce nulla...
    sì è vero è proprio quello l'errore.
    ho corretto e ora funziona.
    grazie anche a te!
    Teologia: l'arte di argomentare l'inesistente per mezzo dell'insostenibile.

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 © 2024 vBulletin Solutions, Inc. All rights reserved.