http://matthias-hielscher.de/blog/395/PHP_Vorsicht_mit_mysql_pconnect.html
Jan
20

[PHP] Vorsicht mit mysql_pconnect()!

Versehentlich nutzte ich anstelle von mysql_connect() die PHP-Funktion mysql_pconnect() um eine Verbindung zur MySQL-Datenbank aufzubauen. Zum Trennen der Verbindung verwendete ich mysql_close(). Bisher lief das auch ganz gut, bis ich merkte, dass ab und zu für wenige Sekunden keine Verbindung zur Datenbank aufgebaut werden konnte.

Bei einer Support-Anfrage an meinen Hoster erhielt ich neben anderen Infos diese:

[...] Dennoch möchten wir auch Sie bitten, Ihre Seite zu optimieren. Durch Ihre Seiten werden permanent bis zu 15 Datenbankverbindungen offen gehalten. Das Limit ist am Server aktuell auf 25 eingestellt. [...]

Nach der Mitteilung war ich so schockiert, dass ich die halbe Nacht nicht schlafen konnte, da ich am Grübeln war, wo mein Fehler liegen könnte. Den Grund für den Fehler habe ich heute Abend erfahren: mysql_close() kann die über mysql_pconnect() aufgebauten Verbindungen nicht trennen, wie auch auf php.net nachzulesen ist:

[...] mysql_close() schließt keine von mysql_pconnect() geöffneten Verbindungen [...]

Das Problem konnte ich ganz einfach lösen, indem ich nun mysql_connect() verwende. Passt also gut auf und macht nicht den gleichen Fehler wie ich. \;\)

mysql_pconnetct() öffnet eine persistente Verbindung zum Datenbank-Server. Diese Verbindungen werden erstellt aber erst nach einer bestimmten Zeit, die in der MySQL-Config definiert wird, geschlossen. PHP lässt solche Verbindungen offen wenn dein Script terminiert. Und genau das war das Problem.

Bleibe auf dem Laufenden!

Wenn du den RSS-Feed abonnierst, wirst du über neue Blogeinträge benachrichtigt.

Kommentare

  • freak4fun
    22.01.2009, 08:59
  • "Versehentlich nutzte ich anstelle von mysql_connect() versehentlich die PHP-Funktion mysql_pconnect() um eine ..."
    Das es nicht mit Absicht war sollte nach diesem Satz klar sein. \;\) Da du alles "versehentlich" machst.

Einen Kommentar schreiben

 
 
  • : *
  • :
  • : *
* Pflichtfelder