2013-12-10 5 views
8

Non sono simile a uno sviluppatore di php, ma devo usarlo e non sono a conoscenza del modo in cui il PHP gestisce l'allocazione della memoria durante la sessione.Quando dovrei chiudere una connessione al database in PHP?

Sto lavorando a un'applicazione che richiede un'autenticazione HTTP, una volta effettuato l'accesso è possibile manipolare i dati tramite un'interfaccia piacevole.
Qualcuno mi ha detto su un altro post, che non dovrei chiudere la connessione dati mysql dopo ogni esecuzione, ma non so come questa connessione rimanga la memoria durante l'utilizzo di questa app perché sul lato server non ho idea di cosa sia PHP tiene in memoria o no.

Quindi la mia domanda è: devo usare un singleton per connettermi al db e non chiuderlo mai (perché non saprò mai quando l'applicazione non è in uso o dovrei stare con quello che faccio oggi: aprire la connessione - > eseguirà istruzione -> stretta connessione

PS:. sto usando mysqli

Edit 1:
La mia applicazione è il design con senso pattern MVC:

|''''''''''|  |'''''''''''''|  |''''''''''''''| 
| view.php | ==> | control.php | ==> | database.php | 
|----------|  |_____________|  |______________| 

Questo modello consente alla vista di interagire con i dati solo tramite lo control.php che quindi chiama una funzione da database.php a SELECT o EDIT dati. con la spiegazione che mi dai, devo mettere:

public function __destruct(){ 
    mysql_close($this->connection); 
} 

all'interno database.php, ma la pagina è carico quando c'è la necessità di selezionare o modificare i dati, in modo che sia eseguito solo per un breve periodo di tempo, il che significa che sarà ancora vicino la connessione alla fine della richiesta.

Che offre una domanda più precisa su dove dovrei inserire la pace del codice che fornisci o il mio schema è pertinente in PHP?

+0

questo è il distruttore della classe che esegue la gestione del database, vedere: http://stackoverflow.com/questions/2129162/how-do-you-efficiently-connect-to-mysql -in-php-without-reconnecting-on-every-que –

+0

questo perché in un pattern MVC CONTROL controlla VIEW e MODEL (database). Nel tuo schema VIEW controlla CONTROL e MODEL.Se codi il tuo MVC nel modo giusto il problema verrà risolto automaticamente –

+0

E qui c'è il problema, non codifico con oggetto perché non so davvero come farlo e non ho il tempo di convertire l'app né il tempo per imparare come funziona – Kiwy

risposta

7

Non creare mai una nuova connessione per ogni query; Non devi neanche chiuderlo manualmente.

Basta creare il collegamento ad inizio pagina di

un'occhiata a: How do you efficiently connect to mysql in php without reconnecting on every query

è possibile utilizzare questo:

public function __destruct() 
{ 
    mysql_close($this->connection); 
} 

che verrà chiamato quando la pagina è chiusa

+0

ma non chiudere la connessione può causare perdite di memoria no? – Kiwy

+0

è possibile chiudere la connessione quando la pagina si chiude, vedere la mia modifica sul post –

+1

Volevo rispondere a questo +1 – Loko

2

Da Mysqli di PHP documentation:

una connessione tra un processo client e un database può essere riutilizzata da un processo client, anziché essere creata e distrutta più volte. Questo riduce il sovraccarico ...