2008-09-19 3 views
6

Am Anfang jeder PHP-Seite öffne ich die Verbindung zu MySQL, verwende sie auf der ganzen Seite und schließe sie am Ende der Seite. Ich leite jedoch oft in der Mitte der Seite auf eine andere Seite um und in diesen Fällen wird die Verbindung nicht geschlossen. Ich verstehe, dass dies nicht schlecht für die Leistung des Webservers ist, da PHP automatisch alle MySQL-Verbindungen am Ende jeder Seite automatisch schließt. Gibt es noch andere Probleme, die Sie beachten sollten, oder ist es wirklich wahr, dass Sie sich nicht darum kümmern müssen, Ihre Datenbankverbindungen in PHP zu schließen?Was passiert, wenn MySQL-Verbindungen auf PHP-Seiten nicht immer geschlossen sind?

$mysqli = new mysqli("localhost", "root", "", "test"); 
...do stuff, perhaps redirect to another page... 
$mysqli->close(); 

Antwort

17

Von:. http://us3.php.net/manual/en/mysqli.close.php

„Offene Verbindungen (und ähnliche Mittel) am Ende der Skriptausführung automatisch zerstört Allerdings sollten Sie noch in der Nähe oder kostenlos alle Verbindungen, Ergebnismengen und Anweisungshandles Sobald sie nicht mehr benötigt werden, können Ressourcen schneller zu PHP und MySQL zurückgeführt werden. "

+0

Wie viel schneller? Wird es im weiteren Verlauf immer langsamer? – Pachonk

2

Es kann eine Grenze geben, wie viele Verbindungen gleichzeitig geöffnet sein können. Wenn Sie also viele Benutzer haben, könnten Sie keine SQL-Verbindungen mehr haben. In der Tat sehen Benutzer anstelle von netten Webseiten SQL-Fehler.

Es ist besser, eine Verbindung zum Lesen von Daten zu öffnen, diese zu schließen und dann Daten anzuzeigen. Sobald der Benutzer auf "Senden" klickt, öffnet sich eine andere Verbindung und alle Änderungen werden gesendet.

+0

"Benutzer sehen SQL-Fehler anstelle von netten Webseiten." - Ich hoffe nicht display_errors = 0 ;! – Ross

3

Nur weil Sie umleiten bedeutet nicht, dass das Skript nicht mehr ausgeführt wird. Eine Weiterleitung ist nur eine Kopfzeile, die gesendet wird. Wenn Sie nicht gleich danach() beenden, wird der Rest Ihres Skripts weiter ausgeführt. Wenn das Skript beendet ist, werden alle offenen Verbindungen geschlossen (oder Sie geben sie zurück an den Pool, wenn Sie persistente Verbindungen verwenden). Mach dir keine Sorgen darüber.

Verwandte Themen