PHP: So ermitteln Sie, ob eine Datenbankverbindung offen ist [duplizieren]

8

Ich habe die folgende Klassenmethode -

%Vor%

Nun, bevor ich die Funktion mysql_close im obigen Code aufruft, möchte ich überprüfen, ob $connection auf eine offene Datenbankverbindung verweist. Das heißt, ich möchte sicher sein, dass die Verbindung, die ich schließe, offen ist und nicht schon geschlossen wurde.

Wie kann ich das tun?

    
MD Sayem Ahmed 19.06.2010, 10:12
quelle

6 Antworten

4

Wenn Sie anderen Code haben, der die Verbindung schließen könnte, lassen Sie sie die Verbindung auf null setzen, damit Sie dies testen können.

Wenn Sie sich nicht sicher sind, ob die Verbindung aufgrund eines Timeouts oder eines Netzwerkfehlers vom anderen Ende geschlossen wurde, können Sie sie nur testen, indem Sie Daten wie mysql_ping senden. Dies wäre jedoch eine schreckliche Verschwendung von Ressourcen, wenn Sie nur versuchen, das Schließen einer Verbindung zu vermeiden, die möglicherweise bereits geschlossen wurde.

Hinweis: Wie von evord erwähnt, versucht mysql_ping, die Verbindung wieder zu öffnen, wenn sie nicht mehr geöffnet ist.

    
kasperjj 19.06.2010, 10:19
quelle
21

Sie könnten versuchen, zu überprüfen, ob Ihre $connection Variable tatsächlich eine gültige Ressource ist.

%Vor%

Bearbeiten : Dieser aktualisierte Code enthält jetzt Gordon . p> %Vor%     

user353297 19.06.2010 10:32
quelle
11

Sie könnten mysql_thread_id ($ verbindung) versuchen. Das wird false zurückgeben, wenn es keine verwendbare Verbindung gibt.

    
Travis 19.06.2010 10:21
quelle
1

Ich würde MYSQLI Erweiterung für diesen Zweck verwenden, da diese Erweiterung automatisch alle Verbindungen behandelt, und Sie müssen sich keine Sorgen machen, aber es überhaupt. Diese Erweiterung ist in jedem Hosting =) Für mich ist es schon seit 4 Jahren ein Standard =)

ein anderer Weg ist vielleicht am besten, um eine Ausnahme zu behandeln, zum Beispiel, wenn Sie nicht @ mysql_close () verwenden wollen, dann fangen Sie Ausnahme und nichts tun =) true zurück ...

    
holms 19.06.2010 10:24
quelle
1

Ich fand eine gute Lösung, um eine Kombination aus den Antworten von Travis und user353297 (und Gordon) mit einer kleinen Ergänzung meiner eigenen zu sein:

Alte Antwort (falsch):

%Vor%

Bearbeiten: Ich habe festgestellt, dass die zuvor aggregierte und verwendete Lösung nicht ordnungsgemäß funktioniert. Das war, weil ich mysqli nicht mysql verwende. Meine bearbeitete Antwort stellt eine funktionierende Version des vorherigen Codes bereit, arbeitet aber mit dem Verbindungsobjekt mysqli (das in Wirklichkeit keine Ressource ist).

Ich habe die Lösung hier gefunden: überprüfe ob eine Variable ist vom Typ mysqli object?

Neue Antwort (und funktioniert ordnungsgemäß für mysqli):

%Vor%

Ich habe eine Funktion erstellt, die einige dieser Anweisungen für bestimmte Datenbankverbindungen enthält, und ich rufe die Funktion am Ende jedes Skripts auf, sobald ich sicher bin, dass ich keine der Verbindungen mehr verwenden werde. Dadurch wird sichergestellt, dass die Threads abstürzen, die Verbindung geschlossen wird - wenn sie geöffnet ist - und dass die Ressourcen freigegeben werden, was zu einem Problem werden kann, wenn viele Verbindungen zu mehreren DBs pro Benutzer bestehen, wie es in meinem Fall der Fall ist.

Vielen Dank an Travis, user353297 und Gordon, dass sie mir die Informationen gegeben haben, die ich brauchte, um das zusammen zu bringen!

    
acarito 22.07.2013 21:14
quelle
0

verwenden Sie @mysql_close($connection) , um Fehler / Warnungen zu unterdrücken.

    
Imre L 19.06.2010 10:19
quelle

Tags und Links