[PHP] metodo di una classe per estrarre i dati con ciclo while

Discussione in 'PHP' iniziata da amhal, 12 Novembre 2016.

  1. amhal

    amhal Utente Attivo

    Registrato:
    17 Febbraio 2011
    Messaggi:
    86
    Mi Piace Ricevuti:
    1
    Punteggio:
    8
    Buongiorno a tutti, ho cominciato da poco a programmare in OOP e mi sono intoppato nel creare un metodo di una classe per l'estrazione di tutti i dati che vada bene per tutte le query che vengono eseguite. Per essere più chiaro posto il codice creato:


    PHP:
     //preparazione query
        
    public function prepare($query){
            
    $this->query $query;
            return 
    true;
        }
    //fine metodo prepare  
        
        //metodo dell'esecuzione della query
        
    public function query(){
        
            if(isset(
    $this->query)){
                
    //controllo se la query è valida
                
    $this->result $this->mysqli->query($this->query);
                    
    //controllo se result è valido
                    
    if(!$this->result){
                        exit(
    'errore nella query %s '.$this->mysqli->error);
                        return 
    false;               
                    }
    //fine if nidificata       
            
    }//fine if   
        
    }//fine metodo esecuzione query
        
        //estrazione dei dati, $type varia a seconda di come voglio i dati estratti: array,oggetto
        
    public function fetch($type){
            
    //processo $type in uno switch
            
    switch($type){
                case 
    'array':
                   while(
    $row $this->result->fetch_object()){
                  
                    return 
    $row;
                    }
                break;
                
                case 
    'object':           
                    
                    while(
    $row $this->result->fetch_object()){
                        return 
    $row;
                    }

                break;
            }
    //fine switch
            
            
    $this->result->close()
            
        }
    //fine metodo fetch estrazione dati
    la parte che non mi funziona è il ciclo while nel metodo fetch sia nel caso object sia nel caso array, se nella index.php includo la classe e lancio i metodi, mi viene a video solo un record del database invece di tutti e 7 presenti. di seguito posto il codice della index

    PHP:
    require_once('database/class_login.php');
    $obj = new access_db();

    $obj->prepare("select * from utenti");
    $obj->query();
    $row $obj->fetch('object');

    echo 
    $row->nome;
    come faccio a eseguire correttamente il ciclo while nel metodo fetch della classe e poter utilizzare tutti i record nella index.php?

    grazie in anticipo
     
  2. marino51

    marino51 Utente Attivo

    Registrato:
    28 Febbraio 2013
    Messaggi:
    2.518
    Mi Piace Ricevuti:
    123
    Punteggio:
    63
    Occupazione:
    free lance
    Località:
    Lombardia
    vorrei suggerirti una via diversa perchè credo che quello che stai facendo sia già o ti porti fuori strada,
    nella mia poca e confusa esperienza, ho definito questi metodi che mi sono sufficienti per tutte le query fin'ora incontrate,

    PHP:
      public function queryS$sql$params=array() ) // return the retrieved dataset
      
    {
        return 
    $this->BindParams$sql$params )->fetchALL();
      }

      public function 
    queryM$sql$params=array() ) // return the counter of the involved rows (insert, update, delete)
      
    {
        return 
    $this->BindParams$sql$params )->rowCount();
      }

      public function 
    queryC$sql$params=array() ) // return the retrieved element
      
    {
        
    $res = ($this->BindParams($sql$params)->fetch()); return empty($res) ? "" current($res);
      }

      public function 
    query$sql$params=array() ) // return $sth, the object for subsequent operation
      
    {
        return 
    $this->BindParams$sql$params );
      }
    queryS risolve una select e restituisce l'intero set dei dati trovati,
    queryM restituisce il numero delle righe coinvolte nell'operazione, ha soprattutto lo scopo di controllare l'efficacia dell'operazione stessa
    queryC ritorna l'unico elemento della select, esempio "count(*)" oppure un codice espressamente cercato, in ogni caso un unico valore
    query permette invece la gestione successiva di quanto è stato "trovato"

    il risultato lo si ottiene con questo esempio,
    PHP:
    $sql "SELECT * FROM PERIODI WHERE id_periodo IN( ?, ?, ? ) and id_struttura=?";
    foreach ( 
    $db->query$sql, array( 111315) ) as $row )
      echo 
    $row['id_periodo']."&emsp;".$row['id_struttura']."&emsp;".$row['data_inizio']."&emsp;".$row['data_fine']."<br />";
    ps, se la query non avesse parametri (perchè codificati all'interno), si semplifica così, "$db->query( $sql )"

    valuta la differenza con quanto stai facendo
     
    Ultima modifica: 12 Novembre 2016
Sto caricando...

Condividi questa Pagina