Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it L'avatar di Dark867
    Registrato dal
    Mar 2010
    Messaggi
    435

    Variabili globali e database

    Ciao a tutti, siccome sono nuovo di php vorrei chiedervi delucidazioni circa alcuni argomenti che per me, abituato con le servlet, risultano abbastanza ostici.
    Lo scenario è questo: ho un sito con un database che deve salvare alcune statistiche di connessione, ad esempio il numero di utenti connessi in giornata.

    La tabella è fatta così:

    id|indirizzo IP|data|ora

    1)Ora, tanto per cominciare l'inizializzazione: avrei interesse a connettermi una volta per tutte al database, in modo che quando arriva una nuova connessione io possa fare solo le insert.
    Nelle servlet dichiaro un metodo init() il cui corpo viene eseguito alla nascita della servlet o alla prima connessione di un client, c'è un qualcosa di simile in php?

    2)Secondariamente mi servirebbe una variabile globale id: è chiaro che questa non può partire da zero a ogni connessione, ma deve avere un valore che si incrementa man mano che si inseriscono righe nel database...come posso fare?

  2. #2
    Moderatore di Off Topic, Kickstarter e XML L'avatar di Sky
    Registrato dal
    Jul 2000
    residenza
    Roma
    Messaggi
    1,053
    La connessione al database può essere gestita con una classe statica, in modo che i suoi metodi e l'istanza della connessione siano raggiungibili in ogni funzione/classe dello script.

    Ecco una bozza su cui puoi lavorare

    Codice PHP:
    class DB {

      public static function 
    openConnection() {
        
    // qui istanzi la connessione, salvandola in self::$connection;
      
    }

      public static 
    getConnection () {
        return 
    self::$connection;
      }


      private static 
    $connection;

    }


    // Inizializzazione della connessione
    DB::openConnection();

    // Da qui in poi per recuperare l'istanza della connessione sarà sufficiente questa riga di codice:
    DB::getConnection(); 

    Per quanto riguarda gli id, imposta il campo del database su "auto increment" (assegnandogli anche la chiave primaria della tabella).
    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
    Utente di HTML.it L'avatar di Dark867
    Registrato dal
    Mar 2010
    Messaggi
    435
    Aspetta, non ho capito bene la sequenza di eventi...mettiamo che creo questa classe statica in un file .php a parte.
    Ora, nella classe dovrei anche mettere un attributo booleano che indica se la connessione è già inizializzata, poi nello script faccio qualcosa tipo
    codice:
    if(non inizializzata){ 
    DB::OpenConnection
    }else{
    DB::getConnection
    }
    Va bene così?

  4. #4
    Moderatore di Off Topic, Kickstarter e XML L'avatar di Sky
    Registrato dal
    Jul 2000
    residenza
    Roma
    Messaggi
    1,053
    Puoi fare di meglio: il controllo sulla connessione al db lo esegui dentro il metodo che la apre così, se anche lo chiamassi due volte, lui effettuerebbe solo la prima.

    La chiamata a openConnection() conviene metterla alla radice dell'applicazione e in seguito far sempre riferimento a openConnection(), dando per buono che la connessione al database sia già avvenuta. A tal proposito si può migliorare anche il metodo getConnection(), facendo un controllo sull'avvenuta connessione; in caso contrario puoi lanciare openConnection() qualora i parametri del login siano raggiungibili globalmente (es: con delle costanti) oppure gestendo l'errore.

    Codice PHP:
    class DB {

      public static function 
    openConnection() {

        if (
    self::$connection == NULL)
          
    // qui istanzi la connessione, salvandola in self::$connection;
        
    else
          return 
    self::getConnection();

      }

      public static 
    getConnection () {

        if (
    /* verifica esistenza connessione al db */)
          return 
    self::$connection;
        else
          
    // Chiamata a self::openConnection() oppure gestione dell'errore

      
    }


      private static 
    $connection;


    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

  5. #5
    Utente di HTML.it L'avatar di Dark867
    Registrato dal
    Mar 2010
    Messaggi
    435
    Praticamente un singleton, ottima idea!
    A questo punto faccio proprio così: dichiaro openConnection come metodo privato e in getConnection metto il controllo:
    Codice PHP:
    if(self::$connection == NULL){ openConnection()};//questo inizializza la connessione 
    return self::$connection 

  6. #6
    Moderatore di Off Topic, Kickstarter e XML L'avatar di Sky
    Registrato dal
    Jul 2000
    residenza
    Roma
    Messaggi
    1,053
    Originariamente inviato da Dark867
    Praticamente un singleton, ottima idea!
    Esatto
    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

  7. #7

    Re: Variabili globali e database

    Originariamente inviato da Dark867
    Ciao a tutti, siccome sono nuovo di php vorrei chiedervi delucidazioni circa alcuni argomenti che per me, abituato con le servlet, risultano abbastanza ostici.
    Lo scenario è questo: ho un sito con un database che deve salvare alcune statistiche di connessione, ad esempio il numero di utenti connessi in giornata.

    La tabella è fatta così:

    id|indirizzo IP|data|ora

    1)Ora, tanto per cominciare l'inizializzazione: avrei interesse a connettermi una volta per tutte al database, in modo che quando arriva una nuova connessione io possa fare solo le insert.
    Nelle servlet dichiaro un metodo init() il cui corpo viene eseguito alla nascita della servlet o alla prima connessione di un client, c'è un qualcosa di simile in php?

    2)Secondariamente mi servirebbe una variabile globale id: è chiaro che questa non può partire da zero a ogni connessione, ma deve avere un valore che si incrementa man mano che si inseriscono righe nel database...come posso fare?
    1) no, non c'e' qualcosa di simile in PHP, perche' PHP funziona diversamente. Un'applicazione PHP non risiede in memoria in attesa di connessioni: ogni richiesta del client avvia un'istanza dell'applicazione che termina quando la richiesta finisce. Non c'e' salvataggio di stati, di connessioni, di variabili, etc. Lo script viene lanciato, fa quello che deve e muore cancellando ogni cosa che ha creato. Controllare se e' gia' presente una connessione al database si fa quando devi eseguire delle query in parti diverse dello stesso script, ma il concetto di condividere la connessione per piu' richieste in PHP non esiste.

    2) come gia' detto, un campo AUTO_INCREMENT nella tabella

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.