• User

    Classe database: restiruire array da query

    Ciao a tutti,
    ho un quesito che mi sta "mangiando l'anima".

    Ho la mia bella classe database, con le classiche funzioni
    connetti() <- connette al database
    query() <- esegue una query

    fetchrow() <- ????
    fetchall() <- ???

    poi ho il mio bel file php che creato l'oggetto, esegue
    connessione
    query: fa una select dei dati di una tabella
    chiamata a fetchall
    output risultati

    posto un po' di codice così è più chiaro

    la classe
    [PHP]
    <?php
    class mysql_db
    {
    private $sql;

    public function __construct($username, $password, $database, $host)    { 
        if($conn = mysql_connect($host,$username,$password) or die (mysql_error())) { 
            $selectDB = mysql_select_db($database,$conn) or die (mysql_error()); 
        } 
    } 
    
    public function query($sql) { 
        $this->sql = mysql_query($sql) or die (mysql_error()); 
    } 
    
    public function fetchrow() { 
         
    } 
    
    public function fetchall() { 
         
    } 
    
    public function __destruct() { 
        mysql_close(); 
    } 
    

    }
    ?>
    [/PHP]

    e l'altro file
    [PHP]
    require_once("mysql.php");

    //Create the mySQL object
    $sqlDB = new mysql_db('username', 'password', 'database', 'localhost');

    //perform an sql query to select the first 10 values in the db
    $sqlDB->query("SELECT * FROM test ORDER BY id ASC LIMIT 10");

    //get the 10 rows
    $rows = $sqlDB->fetchall();

    foreach ($rows as $row)
    {
    echo $row['id'].": ".$row['name']."<br/>";
    }
    [/PHP]

    Bene, come proseguo? In pratica con fetchall() dovrei restituire l'array della select.
    Ho provato con "return mysql_fetch_array($this->sql)", ma restituisce le prime due righe della tabella.
    L'utilità dell'altra funzione fetchrow() qual'è secondo voi?


  • User

    Risolto su un altro forum con

    public function fetchall() {
    $return = array();
    while($row=mysql_fetch_array($this->sql)) $return[] = $row;
    return $return;
    }

    Qualcuno invece ha idea dell'utilità del metodo fetchrow()?


  • User

    fetchrow() ti ritorna i-esima riga della query se già eseguita una seconda volta, la prima in caso contrario.
    Quindi potremmo dire che la fetchall è l'esecuzione di N fetchrow


  • User Attivo

    @peppeocchi said:

    Ciao a tutti,
    Bene, come proseguo? In pratica con fetchall() dovrei restituire l'array della select.
    Ho provato con "return mysql_fetch_array($this->sql)", ma restituisce le prime due righe della tabella.

    fetchall() significa che vuoi prelevare tutti i record, quindi è un array multidimensionale.

    [php]
    $rows = array();
    while ($row = mysql_fetch_array($this->sql)) $rows[] = $row;
    return $rows;
    [/php]

    @peppeocchi said:

    L'utilità dell'altra funzione fetchrow() qual'è secondo voi?

    Quello che hai scambiato per fetchall()... fetchrow() deve prelevare solo un riga, quindi è esattamente return mysql_fetch_array($this-sql). Non ho capito perché dici che ritorna due righe e non una.


  • User

    Perchè è questo il contenuto dell'array

    Array ( [0] => 1 [id] => 1 [1] => Hello World! [name] => Hello World! )

    Mi sono confuso io perchè ho una tabella popolata con gli stessi risultati. Insomma come output ho 2 volte la stessa riga.

    Iceman84
    [INDENT]fetchrow() ti ritorna i-esima riga della query se già eseguita una seconda volta, la prima in caso contrario.
    Quindi potremmo dire che la fetchall è l'esecuzione di N fetchrow[/INDENT]

    e se volessi fare interagire entrambi i metodi senza perdere le key?
    Perchè sull'altro file ho
    [PHP]
    $rows = $sqlDB->fetchall();

    foreach ($rows as $row)
    {
    echo $row['id'].": ".$row['name']."<br/>";
    }
    [/PHP]