Zitat:
|
Ich bin immer davon ausgegangen, dass mysql_close im Prinzip nicht nötig ist, da eine aufgebaute Datenbankverbindung von "allein" nach dem Ende eines Skripts geschlossen wird.
|
das hängt ganz davon ab, ob du mit mysql_connect() oder mysql_pconnect() die verbindung zur datenbank aufgebaut hast.
die verwendung von mysql_close() bei nicht-persistenten verbindungen ist nicht nötig, da alle datenbank-verbindung am ende des scripts geschlossen und die resourcen freigegeben werden.
sofern mysql_close() ohne verbindungs-id verwendet wird wird lediglich die
letzte Verbindung zum Datenbankserver geschlossen. andernfalls wird eben
nur die angegebene verbindung geschlossen.
abhilfe bei nicht-persistenten verbindungen schafft hier folgenden konstruktion, welche jedoch nicht unbedingt empfehlenswert ist.
PHP-Code:
<? while(@mysql_close()) { } ?>
mysql_close() ist außerdem nicht in der lage persistente verbindungen zu schließen. daher ist im script kein explizites schließen der db erforderlich.
Zitat:
|
gilt das für Skripte, die in PHP3 geschrieben wurden, genauso wie für PHP4-Skripte? Oder gibt es da einen Unterschied?
|
nö, sowohl in php3 als auch in php4.
Zitat:
|
"Wann" ist denn das Skriptende? In dem Moment, wo man ein anderes aufruft? Oder wenn die letzte Zeile PHP-Code ausgeführt wurde?
|
das scriptende tritt ein, nachdem der komplette quellcode geparst und ausgeführt wurde.
Zitat:
|
Der Grund, wieso ich das Frage, ist dass unser Server eigenartigerweise nach relativ kurzer Zeit mehrere tausend offene Datenbankverbindungen hat und dadurch immer langsamer wird. Woran kann das liegen?
|
du verwendest wahrscheinlich keine persistenten verbindungen, daher die ganzen offenen verbindungen. sofern du nicht mehrere datenbanken verwendest empfiehlt sich die verwendung von persistenten verbindungen, wodurch ebenfalls die datenbank entlastet wird, denn das öffnen und schließen von verbindungen gehört zu einer der intensivsten aktionen.
mfg raziel