2009-08-29 9 views
10

Gibt es einen Grund, warum ich die Verbindung nach einer Abfrage oder am Ende des Skripts schließen sollte?Warum mysqli_close() verwenden?

Was sind die Vorteile des Tuns/Nicht Tuns?

+0

Wenn Sie über PHP-Skripte sprechen, kann ich vorschlagen, dieses Tag zu Ihrer Frage hinzuzufügen? –

+0

Dupe: http://stackoverflow.com/questions/880885/close-mysql-connection-wichtig und verwandt: http://stackoverflow.com/questions/336078/php-mysql-when-is-the-best-time Von der Datenbank abtrennen – karim79

Antwort

20

Die Verbindung (wenn nicht persistent) ist immer am Ende des Skripts geschlossen, so dass Sie es in der Theorie nicht selbst schließen müssen.

Wenn Ihr PHP-Skript viel Zeit benötigt, um es auszuführen, ist es eine gute Idee, die Verbindung zu schließen, wenn Sie keine Anfrage an die Datenbank mehr machen müssen - zumindest wenn die langen Berechnungen abgeschlossen sind nach den Abfragen.

Dies gilt insbesondere, wenn Ihre Anwendung auf einem gemeinsam genutzten Hosting bereitgestellt wird: Ihr Benutzerkonto kann im Allgemeinen nur einige wenige Verbindungen gleichzeitig geöffnet haben. (Die Anzahl der gleichzeitig geöffneten Verbindungen kann bei Shared Hosting ziemlich klein sein; auf privaten Servern ist sie in der Regel größer).


Der Grund, warum wir oft nicht schließen Verbindungen ourselfves ist:

  • wir nicht wirklich in der Regel wissen, wenn wir alle unsere Fragen getan haben - dies vor allem mit Seiten wahr ist, die gemacht sind viele kleine "Blöcke"; jeder von diesen ist unabhängig von den anderen und kann selbstständig Abfragen durchführen; also, wann können wir die Verbindung schließen?
  • Webseiten sind in der Regel ziemlich schnell zu erstellen, so dass wir uns nicht wirklich darum kümmern, die Verbindung zur DB zu schließen.
+19

Jedes Mal, wenn Sie Ihre Verbindungen nicht schließen, tötet ein DBA ein Kätzchen. – Eric

+0

Jedes Mal, wenn ich keine Verbindung schließe, macht PHP die Arbeit für mich: -p PHP speichert die Kätzchen! ;; tatsächlich, was ich mit der Seite aus Blöcken gesagt habe, ist ziemlich wahr: Denken Sie über irgendein CMS nach, als Beispiel: Wann weiß ich, dass die Verbindung geschlossen sein sollte? Am Ende der Ausführung des PHP-Codes (nicht vorher, da einige "Blöcke" noch einige SQL-Abfragen ausführen müssen) ;; Also, die Verbindung von Hand zu schließen ist ziemlich nutzlos ... ;; außer natürlich, wenn du etwas erzeugst, das Zeit braucht und keine Datenbankabfrage macht, wie eine PDF oder so ähnlich. –

5

Der Vorteil ist, wenn Sie eine langwierige Verarbeitung durchführen, aber die Datenbank abfragen, dann hat es keinen Sinn, eine Verbindung offen zu halten. Dasselbe gilt für das Halten der Benutzersitzung (die andere Anfragen blockiert).

Ein Beispiel hierfür könnte die Erstellung eines großen PDF-Berichts sein. Dies kann 20-30 Sekunden dauern, um die Datei zu erstellen und zu schreiben, aber Sie erhalten alle Daten, die Sie in der ersten Sekunde benötigen.

Normalerweise können Sie es aber auch automatisch tun (vorausgesetzt, die Verbindung ist nicht dauerhaft).

+1

Was ist dauerhafte Verbindung? mysqli (MYSQL_HOSTNAME, BENUTZERNAME, PASSWORT, DATENBANK); 'ist persistent? – Tahtakafa

+0

Im Gegensatz zur mysql-Erweiterung bietet mysqli keine separate Funktion zum Öffnen persistenter Verbindungen. Um eine persistente Verbindung zu öffnen, müssen Sie beim Verbinden p: dem Hostnamen vorangehen. – Tarik