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

    classe per gestire Db mysql

    Come da titolo......
    Programmo php da un po di anni, ma mai mi son cimentato con lo scrivere una classe, al massimo usavo quelle già consolidate e trovate in rete.
    Lavorando il tempo per lo studio e la sperimentazione è sempre pochissimo, così durante le vacanze estive mi son messo su ed ho studiato un pochino, arrivando a creare la mia prima classe, ovviamente, per gestire lo scambio dati col DB mysql (visto che è la cosa che piu spesso serve)
    Ora vorrei solo da un lato diffondere dall'alto chiedere 2 dritte per quel che rigurada questa fantasmagorica classe :-D
    Come migliorarla? Son sulla stradagiusta sullo studio delle classi php ?
    qui il codice
    grazie in anticipo

    Codice PHP:
    //creo una classe x la gestione del db
    class mysql{
        
        
    //proprietà
        //uso protected per evitare di modificare i valori 
        
    protected  $database;
        protected  
    $host;
        protected  
    $user;
        protected  
    $password;
        protected  
    $db;
        protected  
    $err_sql;

    //costruttore
    // al suo interno effettuo la connessione al DB
        
    function __construct($database,$host,$user,$password){
            
    //il costruttore popola solo le proprietà di classe
            
    $this->database=$database;
            
    $this->host=$host;
            
    $this->user=$user;
            
    $this->password=$password;
        }
        
        
    //metodo connessione;
    //utilizzo la visibilità protected per evitare di utilizare la connessione fine a se stessa
    //questo metodo può essere richiamato solo da altri metodi 
        
    protected  function connect(){

            
    $this->db=mysql_connect($this->host,$this->user,$this->password);
            if(
    $this->db){
                
    //connessione andata a buon fine
                
    return mysql_select_db($this->database,$this->db) or die("Impossibile selezionare DB");    
            }else{
                
    //connessione fallita
                
    echo   "<p style=\"color:red\">Non mi son collegato al db.
    Ricontrolla i parametri </p>"
    ;
                return 
    false;        
            }    
        }

        
    //metodo chiusura connessione
        
    public function close() {
            return 
    mysql_close($this->db);
        }



        public function 
    query($sql){
            if(
    $this->connect()){
                return 
    mysql_query($sql);    
            }
        
        }

    ########################################
    //metodo chestampa query che henera errore

    public function errore($tipo=''){
        switch(
    $tipo){
            case 
    '':
            case 
    'sql':
                echo 
    $this->err_sql;    
            break;    
            
        }
        
    }

    //metodo che legge una query select restituendo array    
        
    public function read($tabella,$filtro=''){
            
    $dati='';
            
            if(
    $filtro !='')
            
    $filtro =' AND '.$filtro;
            
            
    $ris=$this->query("SELECT * FROM $tabella where 1 $filtro");
            if(
    $ris!=''){
                    while (
    $riga=mysql_fetch_assoc($ris)){
                        
    $dati[]=$riga;
                    }
                return 
    $dati;
            }
        
        }



    ########################################
    //metodo che passa una query insert
        
    public function insert($tabella,$dati){
            
    $chiavi '';
            
    $valori '';
            
            
    $sql "INSERT INTO $tabella  ";
            foreach(
    $dati as $k =>$v){
                
    $chiavi .=$k.',';
                
    $valori .= "'$v',";
            }
            
    $chiavi=substr(rtrim($chiavi),0,(strlen(rtrim($chiavi))-1));    
            
    $valori=substr(rtrim($valori),0,(strlen(rtrim($valori))-1));    
            
    $sql.='('.$chiavi.')';
            
    $sql.=" VALUES ($valori)";
        
        
            if(
    $this->query($sql)){
                return 
    true;
            }else{ 
    $this->err_sql =  $sql;}
            
        }
        
        
    ########################################
    //metodo che passa una query update
        
    public function update($tabella,$dati,$valore,$campo='id'){
            
    $campi='';
            
    $sql "UPDATE $tabella SET ";
            foreach(
    $dati as $k =>$v){
                
    $campi .="$k = '".rtrim($v)."',";
            }
            
    $campi=substr(rtrim($campi),0,(strlen(rtrim($campi))-1));    
            
    $sql.=$campi;
            
            
    $sql.=" WHERE $campo = '$valore'";
            if(
    $this->query($sql)){
                return 
    true;
            }else{
    $this->err_sql =  $sql;}
            
        }
        
    ########################################
    //metodo che passa una query delete
        
    public function delete($tabella,$valore,$campo_confronto='id',$campo=''){
            
            
            if(
    $campo!=''){
            
    //svuoto solo un campo     
                
    $sql="UPDATE $tabella SET $campo = '' WHERE $campo_confronto = '$valore';";
            }else{
            
    //elimino riga    
                
    $sql "DELETE FROM $tabella WHERE $campo_confronto = '$valore' ";
            }
                    if(
    $this->query($sql)){
                return 
    true;
            }else{
    $this->err_sql =  $sql;}
            


        }    
        
    ########################################
    //metodo che trova una riga 
        
    public function riga($tabella,$valore,$campo='id'){
            
    $ris $this->read($tabella,$campo = $valore"); 
            if(
    $ris!=''){
                return 
    $ris[0];
            }else{
    $this->err_sql =  $sql;}

        }
    ########################################
    //metodo che genera una select di un campo di una tabella

        
    public function select($tabella,$nome_da_visualizzare,$value,$filtro=''){
            
    $riga $this->read($tabella,$filtro);
            
    $n=$this->conta($tabella,$filtro);
            
    $opt='<option>--Scegli--</option>';
            if(
    $riga!=''){    
                for(
    $i=0;$i<$n;$i++){
                    
    $opt.= '<option value="'.$riga[$i][$value].'">'.$riga[$i][$nome_da_visualizzare].'</option>';
                }            
                    return 
    "<select name=\"$value"."_"."$nome_da_visualizzare\" id=\"$value"."_"."$nome_da_visualizzare\">".$opt.'</select>';

                }
            
        }


    ########################################
    //metodo che conta i dati di una tabella con opzionale filtro
        
    public function conta($tabella,$filtro=''){
            if(
    $filtro !='')
            
    $filtro =' AND '.$filtro;
            
    $ris=$this->query("SELECT count(*) FROM $tabella WHERE 1 $filtro");
            if(
    $ris!=''){
                
    $rigamysql_fetch_array($ris);
                return 
    $riga[0];
            }else{
                return 
    0;
            }
        }
        
    ########################################
    //metodo che conta i dati di una tabella con opzionale filtro    
        
        
    public function trova($tabella,$campo,$campo_confronto,$valore){    
         
    $dati=array();
         
    $sql="SELECT $campo FROM $tabella  WHERE $campo_confronto = '$valore'";
        
            
    $ris=$this->query($sql);
            if(
    $ris!=''){
                    while (
    $riga=mysql_fetch_assoc($ris)){
                        
    $dati[]=$riga;
                    }
                return 
    $dati;
            }
        
    }
        
        
        


    }





    /*
    //istanzio classe
    $prova = new mysql($database,$host,$user,$password);

    //restituisco array
    $prova->read('tabella','filtro(opzionale)');

    //query
    //passo una query qualunque
    //restituisco bool
    $prova->query('sql');

    //read
    //
    $prova->read(tabella,filtro(opzionale))



    //insert
    //insert in tabella (array = chiave valore)
    //restituisco bool
    $prova->insert('tabella',array);->bool    


    //conta
    //conto gli elementi du una tabella filtro opzionale
    //restituisce numero
    $prova->conta('tabella','filtro (opzionale)');


    //select
    //restituisce un campo di tipo select
    //nome da visualizzare nel menu a tendina
    // value da passare (default il dato precedente )
    //filtro opzionale
    $prova->select('tabella','nome_da_visualizzare','campo_value','filtro(opzionale)');


    //riga
    //restituisce un array di una riga sola
    //nome tabella
    //valore campo confronto
    //campo di confronto di default id 
    $prova->riga('tabella','valore','campo')



    //update 
    //tabella (array = chiave valore) 
    // valore del campo 
    // campo (default id)
    //restituisco bool
    $prova->update($tabella,$dati,$valore,$campo,);


    //delete
    //tabella
    //valore del campo
    //campo di confronto (default id)
    //campo(default vuoto ) se non vuoto cancella solo il campo corrispondente, se vuoto cancella la riga
    $prova->delete($tabella,$valore,$campo_confronto='id',$campo='')


    //trova
    //tabella
    //campo da cercare
    //campo da confrontare
    //valore da confrontare

    $prova->trova($tabella,$campo,$campo_confronto,$valore)


    //errore
    //stampo errore , default la query 
    $prova->errore()

    */ 

  2. #2
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    3,709
    L'ho letta a grandi linee... se ti serve come "esercizio" mi pare un buon inizio... per un uso pratico ti suggerirei di dare un'occhiata anche a PDO_MYSQL (es.: http://us.php.net/manual/en/ref.pdo-mysql.php) che di fatto già realizzano qualcosa del genere (o come "spunto" o da estendere direttamente).

    Per quanto riguarda i "suggerimenti"... dallo sguardo "d'insieme" ho comunque notato una cosa che andrebbe gestita diversamente: dato lo scopo che si dovrebbe prefiggere questa classe non è "corretto" utilizzare il costrutto "... or die(...)" come si fa "comunemente", sarebbe meglio utilizzare le eccezioni in modo che l'utente possa decidere come comportarsi in caso di problemi (per esempio se la connessione non va a buon fine).

  3. #3
    Grazie per la risposta,
    in effetti è un esercizio che sto utilizzando e quindi mi piace pensare di migliorarla il piu possibile.
    Usare qualcosa di già fatto è vero che funziona sicuramente meglio ma non se en comprende a pieno gli strumenti...... diciamo che sarà il passo che farò quando avrò completam,ente in mano lo strumento OO.
    In effetti quello è un punto su cui volevo lavorare.
    Ancora grazie ed a presto con la beppe 2.0 :-D

  4. #4
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    3,709
    Bene! Per esercizio può essere anche utile "riprodurre" qualcosa di già esistente... comunque mi sembra interessante quello che stai facendo!
    L'indicazione di PDO_MYSQL penso possa esserti utile per avere un'idea di come impostare metodi e proprietà... e adesso: buon lavoro!

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.