+ Rispondi alla Discussione
Risultati da 1 a 7 di 7

connessioni al server mysql via OOP

Ultimo Messaggio di Pablito il:
  1. #1
    User
    Data Registrazione
    Aug 2006
    Messaggi
    79

    connessioni al server mysql via OOP

    Ciao a tutti

    sto tentando (INUTILMENTE) di applicare la programmazione ad oggetti per fare la connessione al server mysql
    Avevo trovato una classe che mi pareva facilissima da implementare invece mi sono impantanato.
    La classe Ŕ:
    <?php
    class Database {

    var $conn = NULL;

    function Database($host, $user, $pass, $dbname){
    $this->conn = mysql_connect($host, $user, $pass)
    or die("ERRORE MYSQL: ".mysql_error());
    mysql_select_db($dbname, $this->conn)
    or die("ERRORE MYSQL: impossibile connettersi al database");
    }

    function ExecuteQuery($query){
    return mysql_query($query, $this->conn)
    or die("ERRORE MYSQL: ".mysql_error());
    }

    function FetchResult($result){
    $data = array();
    while($tmp = mysql_fetch_assoc($result))
    $data[] = $tmp;
    return $data;
    }

    function Close(){
    mysql_close($this->conn);
    }
    }
    ?>

    lavora mi sembra bene nella creazione del nuovo oggetto di connessione quindi mi pare che apra la connessione ma poi non riesco a far lavorare le altre funzioni ExecuteQuery e FetchResult

    Forse voi mi potreste dare una mano ad impolementare meglio questa classe oppure mi potreste indicaste una classe impostata in maniera differente con cui io possa iniziare a capire qualche cosa.
    La devo applicare su di una rubrica per la ricerca di nomi in base a criteri di ricerca multipli con dati inseriti dall'utente in campi input come la ricerca avanzata di google.
    Senza la OOp va tutto quasi bene (poi vi dico cosa intendo per quasi bene in un prossimo 3d)

    Per ora vi sare molto grato per una mano

    Grazie a tutti

  2. #2
    User L'avatar di ilnetsurfer
    Data Registrazione
    Jun 2007
    LocalitÓ
    Napoli
    Messaggi
    552
    a parte
    while($tmp = mysql_fetch_assoc($result)) senza la {
    cosi
    while($tmp = mysql_fetch_assoc($result)){
    potresti iniziare ad inserire alcune variabili nella classe come
    class Database {

    var $conn = NULL;
    public $data


    $this->data = array();
    while($tmp = mysql_fetch_assoc($result))
    $data[] = $tmp;
    e poi




    $database = new database();
    $database->fetchresult($xxx);
    $row=$database->fetchresult->data
    Ultima modifica di ilnetsurfer; 22-09-08 alle 20:42
    He knows not where he's going.For the ocean will decide.It's not the DESTINATION...It's the glory of the RIDE.

  3. #3
    ModSenior L'avatar di mister.jinx
    Data Registrazione
    May 2007
    LocalitÓ
    Toscana
    Messaggi
    8,683
    Segui mister.jinx su Twitter Aggiungi mister.jinx su Google+ Aggiungi mister.jinx su Facebook Aggiungi mister.jinx su Linkedin Visita il canale Youtube di mister.jinx
    Ciao Pablito

    ci sono giÓ ottimi framework completamente OOP anche in PHP.

    Alcuni si basano sulla modello dell'active record e a me non piacciono molto soprattutto perchŔ quando il modello di dati Ŕ complesso, le query con diversi Join non riesci a farle facilmente. Sono quei modelli utilizzati da framework tipo il CakePHP e simili.

    Se vuoi provare qualcosa di davvero ben modellato e modellabile ti suggerisco di guardare un ORM come Propel (lo trovi qui propel.phpdb.org). Fatto bene perchŔ "clonato", come logica e come configurazione da Hibernate (in Java). Funziona molto bene anche se pu˛ inizialmente apparire complesso e richiedere un p˛ di studio per la configurazione e la comprensione del funzionamento.

  4. #4
    User
    Data Registrazione
    Jun 2007
    Messaggi
    454
    Un regalo alla comunitÓ, vi dono questa mia classe creata tempo fa.
    se ne volete una uguale per altri db ditemelo

    $db = new mysql($hostname, $username, $password, $database);//si connette al db, aggiungere un true alla fine per connessione persistente
    $db->query('query');//effettua una query
    $db->query_array('query');//effettua una query e ritorna un array (mysql_fetch_array), aggiungere un true per mettere in cache il risultato(sconsigliato)
    $db->query_list('query'); //effettua una query e ritorna una lista di array, aggiungere un true per mettere in cache il risultato(sconsigliato)

    Codice:
    <?php
    /**
     * Driver MySQL for database transaction
     *
     * @package Dev-Site
     * @author Gonšalo Margalho <gsky89@gmail.com>
     * @copyright Dev-House.Com (C) 2006-2008
     * @license h tt p:// w ww.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License
     * @version 1.0
     */
     
    define( 'SQL_CACHE_DIRECTORY', './cache/sql' );
    
    global $nquery, $ncached_query, $sql_debug;
    $nquery = 0;
    $sql_debug = true;
    
    class mysql{
    
        /**
         * meter of functions
         *
         * @var integer
         */
        private $sql_function_level = 0;
    
        /**
         * Make a connection with the database
         *
         * @param string $hostname Server SQL
         * @param string $username Name of User SQL
         * @param string $password Password of User SQL
         * @param string $database Name of Database SQL
         * @return boolean
         */
        public function __construct( $hostname, $username, $password, $database, $persistent = false ){
            if($persistent == true){
                $this->db_link = mysql_pconnect( $hostname, $username, $password ) or die( mysql_error() );
                return mysql_select_db( $database ) or die ( mysql_error() );
            }
            else{
                $this->db_link = mysql_connect( $hostname, $username, $password ) or die( mysql_error() );
                return mysql_select_db( $database ) or die ( mysql_error() );
            }
        }
        
        /**
         * Make a query
         * 
         * @param string $query Query to make
         * @return mixed|trigger_error
         */
        public function query( $query ){
            global $nquery, $sql_debug;
            $this->sql_function_level++;
            $nquery++;
            if( $this->result = mysql_query( $query ) ){
                   $this->sql_function_level = 0;
                return $this->result;
            }
            elseif( $sql_debug AND $debug_array = debug_backtrace() )
                echo $this->trace_error( $query );
            $this->sql_function_level = 0;
        }
        
        /**
         * Make a query and return an array, example: array( 'name of  field 1' => 'value of field 1', 'name of  field 2' => 'value of field 2' ... 'name of  field n' => 'value of field n' )
         *
         * @param string $query Query to Make
         * @return array
         */
        public function query_array( $query, $cache = FALSE ){
    
            if( $cache AND file_exists( $file_cache = ( SQL_CACHE_DIRECTORY . "/sql_" . ( $hash = md5( $query ) ) . ".php" ) ) ){
                include_once( $file_cache );
                return $GLOBALS[ 'sql_' . $hash ];
            }
    
            $this->sql_function_level++;
            if( $result = $this->query( $query ) ){
                $query_array = mysql_fetch_array( $result, MYSQL_ASSOC);
    
                if( $cache ){
                    $fp = fopen ( $file_cache, 'w' );
                    fwrite( $fp, $query_array_string = "<?php" . "\n" . "\$GLOBALS['sql_" . $hash . "'] = " . var_export( $query_array, TRUE ) . ";" . "\n?>", strlen( $query_array_string ) );
                    fclose( $fp );
                    $GLOBALS[ 'ncached_query' ]++;
                }
                return $query_array;
            }
        }
        
        /**
         * Make a query and return an array list, example: array( array row 1, array row 2 ... array row n )
         * Use this function for get n rows, n>1
         *
         * @param string $query Query to Make
         * @return array
         */
        public function query_list( $query, $cache = FALSE ){
    
            if( $cache AND file_exists( $file_cache = ( SQL_CACHE_DIRECTORY . "/sql_" . ( $hash = md5( $query ) ) . ".php" ) ) ){
                include_once( $file_cache );
                return $GLOBALS[ 'sql_' . $hash ];
            }
    
            $this->sql_function_level++;
            if( $result = $this->query( $query ) ){
                $query_list = array( );
                while( $row = mysql_fetch_array( $result, MYSQL_ASSOC ) )
                    $query_list[ ] = $row;
    
                if( $cache ){
                    $fp = fopen ( $file_cache, 'w' );
                    fwrite( $fp, $query_array_string = "<?php" . "\n" . "\$GLOBALS['sql_" . $hash . "'] = " . var_export( $query_list, TRUE ) . ";" . "\n?>", strlen( $query_array_string ) );
                    fclose( $fp );
                    $GLOBALS[ 'ncached_query' ]++;
                }
                return $query_list;
            }
        }
        
        /**
         * Make a query and return a number of rows
         *
         * @param string $query Query to Make
         * @return integer
         */
        public function query_count( $query ){
            $this->sql_function_level++;
            return mysql_num_rows( mysql_query( $query ) );
        }
        
        /**
         * Return the number of Queries
         *
         * @return integer
         */
        public function nQuery( ){
            return $GLOBALS[ 'nquery' ];
        }
    
        /**
         * Return the number of Cached queries
         *
         * @return integer
         */
        public function nCachedQuery( ){
            return $GLOBALS[ 'ncached_query' ];
        }
    
        /**
         * If the parameter is set delete the cache of the query, else is null delete all cache
         *
         * @param string $query Query to remove from cache
         */
        public function delete_cache( $query = null ){
            if( $query )
                unlink( SQL_CACHE_DIRECTORY . "/sql_" . ( $hash = md5( $query ) ) . ".php" );
            else if( $cache_files = glob( SQL_CACHE_DIRECTORY . "/*.php" ) )
                foreach( $cache_files as $file_name )
                    unlink( $file_name );
        }
        
        /**
         * Close the connection with the database
         * 
         * @return boolean
         */
        public function disconnect( ){
            return mysql_close( $this->db_link );
        }
    
        
        /**
         * This function make a div with the error
         *
         * @param string $query Query who are the error.
         * @return string
         */
        private function trace_error( $query ){
            $sql_error = mysql_error();
            $debug_array = debug_backtrace();
    
            $error_html = "\n" .
                  "<div style=\"background-color:#f8f8ff; border: 1px solid #aaaaff; padding:10px;\">" . "\n" .
                 "<font size=\"-1\">error: </font><font color=red>{$sql_error}</font><br>" . "\n" .
                 "<font size=\"-1\">query: </font><i>{$query}</i><br><br>" . "\n" .
                 "<font size=\"-1\">backtrace: </font><br>" . "\n" .
                 "    <div style=\"background-color:#ffffff; border: 1px dotted #9999ee; padding: 10px;\">" . "\n";
                 
            for( $i = $this->sql_function_level; $i < count( $debug_array ); $i++ ){
                $error_html .= "<font size=\"-1\">file: </font>" . str_replace( $_SERVER[ 'DOCUMENT_ROOT' ], "", $debug_array[ $i ][ 'file' ] ) . "<br>" . "\n";
                if( isset( $debug_array[ $i ][ 'function' ] ) )
                    $error_html .= "<font size=\"-1\">function: </font>{$debug_array[ $i ][ 'function' ]}<br>" . "\n";
                $error_html .= "<font size=\"-1\">line:</font> {$debug_array[ $i ][ 'line' ]}<br><br>" . "\n";
            }
            $error_html .= "</div></div><br>" . "\n";
            return $error_html;
        }
    }
    ?>

  5. #5
    User
    Data Registrazione
    Aug 2006
    Messaggi
    79
    Citazione Originariamente Scritto da Skyline Visualizza Messaggio
    Un regalo alla comunitÓ, vi dono questa mia classe creata tempo fa.
    se ne volete una uguale per altri db ditemelo
    Ciao e grazie
    l'ho provata subito e devo francamente dire che Ŕ l'unica classe fra quelle provate che NON mi ha dato problemi e che si Ŕ messa al lavoro subito senza errori.

    Adesso per˛ chiedo un ulteriore spiegazione.
    Vorrei usare la tua classe per un select(per adesso semplice) su di un mio database molto vasto di analisi chimiche per la ricerca di uno specifico tipo di analisi.
    Accade spesso che il numero di analisi ritornato dalla query sia DI VARIE CENTINAIA di analisi che io desidero mostrare a video in ragione di 15 alla volta con sotto il men¨ di navigazione tra le varie pagine che contengono le 15 analisi
    Come mi consigli di implementare questo procedimento data l'ottima flessibilitÓ della tua classe?
    Ho trovato alcune classi per fare oggetti di men¨ per rendere dinamico il men¨ di visualizzazione delle pagine contenenti le 15 analisi per pagina ma forse mi puoi consiglire qualche cosa di meglio.

    Grazie in anticipo
    Ultima modifica di JACK1971; 25-09-08 alle 00:03 Motivo: 3.1. I titoli ed i testi devono essere scritti in italiano corretto, sia grammaticamente che ortograficamente.

  6. #6
    User
    Data Registrazione
    Jun 2007
    Messaggi
    454
    umm vuoi fare un sistema a pagine? mostrarne 15 per pagina? dimmi se Ŕ giusto...

  7. #7
    User
    Data Registrazione
    Aug 2006
    Messaggi
    79
    Citazione Originariamente Scritto da Skyline Visualizza Messaggio
    umm vuoi fare un sistema a pagine? mostrarne 15 per pagina? dimmi se Ŕ giusto...

    Si

+ Rispondi alla Discussione

^ Permessi di Scrittura

  • Tu non puoi inviare nuove discussioni
  • Tu non puoi inviare risposte
  • Tu non puoi inviare allegati
  • Tu non puoi modificare i tuoi messaggi
  •  
  • Il codice BB Ŕ Attivato
  • Le faccine sono Attivato
  • Il codice [IMG] Ŕ Attivato
  • Il codice [VIDEO] Ŕ Attivato
  • Il codice HTML Ŕ Disattivato
  • Trackbacks Attivato
  • Pingback Attivato
  • Refback Attivato

SEO by vBSEO 3.6.0 PL2 ©2011, Crawlability, Inc.