2009-08-29 20 views
10

C'è qualche ragione per cui dovrei chiudere la connessione dopo una query o alla fine dello script?Perché usare mysqli_close()?

Quali sono i vantaggi di fare/non fare fare?

+0

Se parli di script PHP, posso suggerire di aggiungere quel tag alla tua domanda? –

+0

Dupe: http://stackoverflow.com/questions/880885/close-mysql-connection-important e related: http://stackoverflow.com/questions/336078/php-mysql-when-is-the-best-time -disconnect-from-the-database – karim79

risposta

20

La connessione (se non persistente) è sempre chiusa alla fine dello script, quindi, in teoria, non è necessario chiuderlo da soli.

Tuttavia, se lo script PHP impiega molto tempo per essere eseguito, è una buona idea chiudere la connessione quando non è più necessario fare alcuna richiesta al database - almeno, se i lunghi calcoli sono fatti dopo le domande.

Ciò è particolarmente vero se la tua applicazione è distribuita su un hosting condiviso: il tuo account utente in genere può avere solo poche connessioni aperte contemporaneamente. (Quel numero di connessioni aperte simultaneamente può essere piuttosto piccolo su hosting condiviso, in genere è maggiore nei server privati).


La ragione per cui spesso non chiudere le connessioni ourselfves è:

  • che in genere non sappiamo quando abbiamo fatto tutte le nostre domande - questo è particolarmente vero con le pagine che sono fatti di molti piccoli "blocchi"; ognuno di questi è indipendente dagli altri, e può fare interrogazioni da solo; quindi, quando possiamo chiudere la connessione?
  • Le pagine Web sono generalmente abbastanza veloci da generare, quindi non ci preoccupiamo veramente di chiudere la connessione al DB.
+19

Ogni volta che non si chiudono le connessioni, un DBA uccide un gattino. – Eric

+0

Ogni volta che non chiudo una connessione, PHP fa il lavoro per me: -p PHP salva i gattini! ;; in realtà, quello che ho detto con la pagina fatta di blocchi è del tutto vero: pensa a qualsiasi CMS, ad esempio: quando sai la connessione dovrebbe essere chiusa? Alla fine dell'esecuzione del codice PHP (non prima, dato che alcuni "blocchi" potrebbero ancora avere bisogno di fare qualche query SQL) ;; quindi, chiudere la connessione a mano è abbastanza inutile ... ;;; tranne, ovviamente, quando si genera qualcosa che richiede tempo e non esegue alcuna query DB, come un PDF o qualcosa del genere. –

5

Il vantaggio è che se si sta eseguendo un'elaborazione di lunga durata ma si è terminato di eseguire query sul database, non è possibile mantenere aperta una connessione. Lo stesso vale per tenere aperta la sessione utente (che blocca altre richieste).

Un esempio potrebbe essere la creazione di un report PDF di grandi dimensioni. Questo potrebbe richiedere 20-30 + secondi per creare e scrivere il file, ma avrai tutti i dati necessari nel primo secondo.

In genere, tuttavia, si può anche farlo automaticamente (presupponendo che la connessione non sia persistente).

+1

Che cos'è la connessione permanente? 'mysqli (MYSQL_HOSTNAME, USERNAME, PASSWORD, DATABASE);' è persistente? – Tahtakafa

+0

Diversamente dall'estensione mysql, mysqli non fornisce una funzione separata per l'apertura di connessioni permanenti. Per aprire una connessione persistente è necessario anteporre p: al nome host al momento della connessione. – Tarik