Pagina 2 di 4 primaprima 1 2 3 4 ultimoultimo
Visualizzazione dei risultati da 11 a 20 su 34
  1. #11
    faccio le cose un po complicate perchè sono agli inizi..
    ok dai la soluzione proposta da te l'ho capita, vedo di fare delle prove
    Originariamente inviato da luke83
    ribadisco che un db_driver sia una soluzione ancora migliore che astrae maggiormente anche l'implementazione del db (mysql, oracle, db2...)
    in parole povere?

  2. #12
    Utente di HTML.it L'avatar di luke83
    Registrato dal
    Jul 2000
    Messaggi
    1,217
    eccco questa è una delle ultime versioni che sto utilizzando.. fa un paio di cose sfiziose, poi quando faccio la nuova versione la posto, questo è n'abbozzo ma funziona...

    Codice PHP:
    <?

    @include("db.sql.php");  // includiamo le stringhe sql

    class db_driver {
        var 
    $connessione "";                // bool: contiene la connessione corrente
        
    var $richieste = array();            // array: salva tutte le richieste effettuate dal db
        
    var $num_richieste 0;                // int: salva il numero di richieste effettuate dal db
        
    var $query_id "";                    // risorsa: contiene la risorsa corrente, dopo una query
        
    var $record_row "";                // array: contiene il record, la riga di risultato, corrente                
        
    var $sql = array();                    // array: contiene le chiamate per il db
        
    var $prefisso "";                    // stringa: eventuale prefisso delle tabelle

        
    function db_driver($connetti=1){
        global 
    $SQL$tbl_prefisso;
            
            
    // passiamo l'array con le chiamate, se esiste:
            
    if (isset($tbl_prefisso)) $this->prefisso = &$tbl_prefisso;
            if (isset(
    $SQL) && is_array($SQL)) $this->sql = &$SQL;
            if (
    $connetti$this->connect(); // connettiamoci al db se richiesto
            

        
    }

        function 
    connect()
        {
            global 
    $dbhost$dbutente$dbpassword$dbnome// parametri connessione
        
            
    if (!($this->connessione mydb_connect($dbhost$dbutente$dbpassword)))
            {
                print 
    "<h3>non riesco a connettermi al db</h3>\n";
                exit;
            }
            if (!(
    mydb_select_db($dbnome$this->connessione)))
            {
                print 
    "<h3>non esiste il db: $dbnome</h3>\n";
                exit;
            }
            
    print_r($this->connessione);
        }

    /*
        bool db_driver::query(string [, array])

        La funzione sottopone al db l'interrogazione del primo argomento.
        Il secondo argomento (opzionale) è utilizzato per passare alla stringa eventuali valori da valutare nelle where ect.
        - i dati sono passati da un array associativo del tipo: dati([campo] => valore, ... )

    */

        
    function query($query=""$dati=array() ){
        
            if (empty(
    $query)) { return FALSE; }    // nessuna richiesta
        
            
    if ($dati)                                // controllo se sono stati passati dati da inserire
                
    $query str_replace(array_keys($dati), array_values($dati), $query);
            
            if (
    $this->prefisso)                    // sostituisco l'eventuale prefisso
                
    $query str_replace("tbl_"$this->prefisso$query);
                
            
    $this->query_id mydb_query($query$this->connessione)    // sono stati riscontrati degli errori, li stampo
                
    or die("ops! richiesta fallita: "
                    
    ."[*]errorno=".mysql_errno()
                    .
    "[*]error=".mysql_error()
                    .
    "[*]richiesta=".$query
                
    );
        
            
    $this->num_richieste++;                    // aggiungiamo la richiesta al totale
                
            
    $this->richieste[] = $query;            // aggiungiamo anche la stringa richiesta
        
            
    return $this->query_id;                    // restituiamo il risultato
        
    }

        function 
    fetch_row($query_id "") {
        
            if (
    $query_id == "")                    // passo l'ultima query se non è stata passata
                
    $query_id $this->query_id;
            
            
    $this->record_row mydb_fetch_array($query_idMYSQL_ASSOC);

            return 
    $this->record_row;
            
        }

        function 
    fetch_array($query_id=-1,$query_string="") {
            
    // retrieve row
            
    if ($query_id!=-1) {
              
    $this->query_id=$query_id;
            }
            if ( isset(
    $this->query_id) ) {
              
    $this->record mysql_fetch_array($this->query_id);
            } else {
              if ( !empty(
    $query_string) ) {
                
    $this->halt("Invalid query id (".$this->query_id.") on this query: $query_string");
              } else {
                
    $this->halt("Invalid query id ".$this->query_id." specified");
              }
            }
        
            return 
    $this->record;
        }
      
        function 
    query_first($query_string ""$dati = array()){
        
        
    $query_id $this->query($query_string$dati);
        
    $returnarray=$this->fetch_array($query_id$query_string);
        
    $this->free_result($query_id);
        return 
    $returnarray;
        }
    /*
        int db_driver::get_num_rows(void)
        
        La funzione restituisce il numero di record pescati dall'ultima interrogazione effetuata
        
    */    

        
    function get_num_rows() {
            return 
    mysql_num_rows($this->query_id);
        }
        


        function 
    free_result($query_id = -1) {
            
            if (
    $query_id != -1) {
              
    $this->query_id=$query_id;
            }
            
            return @
    mysql_free_result($this->query_id);
          
          }

    };
    ?>
    la funzione halt puoi personalizzarla x l'errore formattato o darla cos' in echo...

    ti ripeto nn è quella che uso io attualmente ma è abbastanza semplice...

    nn fa altro che creare un oggetto
    Codice PHP:
    $db=new db_driver
    al quale riferirti come se parlassi col db direttamente senza interessarti se sotto c'è mysql e co. se un domani cambi politica e ti compri la licenza oracle, questo e solo questo sarà l'unico file da modificare, cambiandogli le chiamate alle funzioni...

    ultima nota: nel file che includo passo delle sorte di dsn del tipo

    nome_sql->SELECT.....

    così le chiamate le fai semplicemente come

    Codice PHP:
    $db->query("nome_sql"); 
    ..::Luca::..
    » "se nn riesci a venirene a capo.. usa il tasto INVIO" © 2005 Luke83
    » "letta la documentazione, spazio all'immaginazione.." © 2006 Luke83
    [frasi random] - [Lucopedia] - [laFetta]

  3. #13
    ottima.. fai la stessa cosa che fa phpBB mi sa

    la provo.. in caso se ho problemi ti contatto

  4. #14
    Utente di HTML.it L'avatar di luke83
    Registrato dal
    Jul 2000
    Messaggi
    1,217
    nn solo lui la fa.. questa nn mi ricordo da dove ho preso la base...

    qui ci sono poche modifiche xkè te ne volevo dare una abbastanza "pulita".. qui c'è solo il dsn in più mi sembra.. ma una volta che hai capito il meccanismo ci puoi fare di tutto di più...
    ..::Luca::..
    » "se nn riesci a venirene a capo.. usa il tasto INVIO" © 2005 Luke83
    » "letta la documentazione, spazio all'immaginazione.." © 2006 Luke83
    [frasi random] - [Lucopedia] - [laFetta]

  5. #15
    allora, stasera sto facendo i primi tentativi.
    premetto che nelle classi ci metto piede per la prima volta..

    ho scopiazzato il codice da phpBB.. visto che alla fine non devo far altro che integrare un sito basandomi su esso.

    ho trovato una pagina che appunto usa il tuo stesso metodo linkato, dove trovo le medesime funzioni che hai postato.

    tecnicamente.. sulla pagina che mi interessa fare la query ho fatto così:

    1) ho incluso tale pagina delle funzioni sql e dove c'è la classe (che in questo caso si chiama "sql_db")

    2) poi creo l'sql e la passo così

    Codice PHP:
    $sql "SELECT post_id FROM phpbb_posts WHERE forum_id='47' ORDER BY topic_id DESC LIMIT 1";

    if( !
    $result $db->sql_query($sql) )
    {
        die(
    " Ricerca fallita: ".mysql_error());

    faccio solo la ricerca senza visuliazzare nulla, è giusto per provare se funziona.

    mi dice: "Fatal error: Call to a member function on a non-object.." riferendosi alla riga "$db->sql_query($sql)"

    credo non sia un problema di connessione al db.. bensi qui siamo ancora prima.. non riconosce l'oggetto..

    c'è una guida sulle classi che me la studio un po?
    mi puoi dare qualche dritta nel frattempo che faccio 2 prove?
    grazie

  6. #16
    ok devo creare l'instanza.. procedo..

    ho trovato anche la guida:
    http://freephp.html.it/articoli/view...sp?id=89&pag=2

    do una letta ciao grazie

  7. #17
    fatto

    molto interessante e versatile.
    ho usato la classe di phpBB alla fine.. usando le sue funzioni.

    se ho problemi ci risentiamo
    ciao e grazie

  8. #18
    Utente di HTML.it L'avatar di luke83
    Registrato dal
    Jul 2000
    Messaggi
    1,217
    ma hai instanziato l'oggetto...

    il dsn phpbb nn ce l'ha di sicuro, cmq poi posto la mia qando la finisco

    Codice PHP:
    <?
    $db
    =new db_driver;
    ?>
    ..::Luca::..
    » "se nn riesci a venirene a capo.. usa il tasto INVIO" © 2005 Luke83
    » "letta la documentazione, spazio all'immaginazione.." © 2006 Luke83
    [frasi random] - [Lucopedia] - [laFetta]

  9. #19
    Utente di HTML.it L'avatar di luke83
    Registrato dal
    Jul 2000
    Messaggi
    1,217
    scusa nn avevo letto questi ultimi due post
    ..::Luca::..
    » "se nn riesci a venirene a capo.. usa il tasto INVIO" © 2005 Luke83
    » "letta la documentazione, spazio all'immaginazione.." © 2006 Luke83
    [frasi random] - [Lucopedia] - [laFetta]

  10. #20
    Originariamente inviato da luke83
    scusa nn avevo letto questi ultimi due post
    dai ragionandoci ci ero arrivato

    cmq grazie per la spiegazione, ora in effetti è tutto un altro lavorare.

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