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

    mysql resource come costante

    Mi trovo in una situazione complessa: ho una classe (composta interamente da metodi statici) che gestisce il db la quale contiene anche il metodo connect al database. Ora, questa va benissimo se devo eseguire solo una query ma nei miei script, strutturati in classi, capita spesso che più oggetti debbano utilizzare il database, quindi se ciascuno dovesse chiamare ogni volta il metodo connect verrebbe fuori un casino, siete d'accordo?
    Io quindi pensavo ad un procedimento simile:

    1) connessione al db
    2) ogni classe esegue le query necessarie
    3) chiusura connessione

    Soluzione che al momento mi ha portato a valutare la myqsl resource come costante, in modo che sia definita una volta sola e accessibile sempre e dovunque. Sul manuale ufficiale ho letto però che questa non è una buona idea.
    Al contrario, se non volessi definirla come costante ma come variabile "normale", mi troverei a doverla propagare in tutto l'albero degli oggetti, fino al gestore db, ad esempio

    codice:
    metodouno( $mysqlresource )
    { 
       metododue( $mysqlresource )
       {
            gestoreDb( query, $mysqlresource )
       }
    }
    Voi che ne dite? Avete esperienza in merito? Qualche idea positiva?
    Vi ringrazio in anticipo per qualsiasi spunto.

  2. #2
    Moderatore di Off Topic, Kickstarter e XML L'avatar di Sky
    Registrato dal
    Jul 2000
    residenza
    Roma
    Messaggi
    1,053
    Se usi l'estensione MySQL, non devi preoccuparti di propagare la resource della connessione.
    Se invece utilizzi MySQLi in modalità a oggetti, giustamente c'è il problema di propagare l'istanza della classe.

    Ma a questo punto perché non sfruttare le proprietà statiche degli oggetti?

    Codice PHP:
    class DB {
      
      public static function 
    getConnection() {

        if (
    self::$connection === NULL)
          
    self::$connection = new Mysqli('host''user''pass''dbname');


        return 
    self::$connection;

      }


      public static 
    $connection;

    // Fine Classe DB



    function blabla() {
      
    DB::getConnection()->query('query da eseguire');

    Questa è solo una classe rudimentale che implementa il pattern chiamato "Active Record", oltre al pattern Singleton per accedere una sola volta al database.
    Lo Stato deve dare ai cittadini, come diritto, ciò che la mafia dà come favore.
    Carlo Alberto dalla Chiesa

    Facebook | Twitter | Last.fm | LinkedIn | Quora

  3. #3
    Sky, mi hai semplicemente illuminato! Non consideravo l'uso delle variabili statiche all'interno di una classe! Risolve in pieno il mio problema.
    Tra l'altro ho letto che un approccio del genere può tuttavia causare il problema delle "too many connections" - naturalmente riferito a sistemi con molti accessi simultanei.
    Qui un articolo interessante.
    Ringrazio e saluto

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