Hallo MB,
ob du mit PDO gespielt hast, ist weniger relevant. Das ist nur eine Hülle um den eigentlichen Datenbank-Treiber.
Wenn es mySQL war, dann möchte ich dies hier zur Lektüre anbieten. Nicht, weil ich Dir das p: Präfix unbedingt ans Herz legen will, sondern wegen der Informationen zum Verhalten von PHP ohne dieses Plugin.
Da steht, dass es im Normalfall eine 1:1 Beziehung zwischen dem MYSQL-Handle und der Netzwerkverbindung zum MySQL Server gibt. Und DAS heißt, dass ein mysqli_connect() bzw. new mysqli() einen neue TCP Connection öffnet und einen Socket auf der Client-Seite belegt. Wie schnell Sockets vom System zum Recyclen freigegeben werden, ist mir nicht ganz klar, aber auf jeden Fall ist damit einer der 32K dynamisch belegbaren Ports auf der IP belegt, auf der der Client Antworten empfängt.
Das Aufbauen einer Socket-Verbindung ist zwar schnell, aber es ist nicht zu verachten. Wenn man bspw. für jedes SQL Statement einen neue Verbindung aufmacht, kann das schnell bemerkbar werden. Vor allem, wenn der SQL Server remote läuft und nicht auf localhost.
Deswegen gibt's ab PHP 5.3 die persistent connections new mysqli("p:localhost")
. Jetzt wird die physikalische Connection nach einem close nicht beendet, sondern auf Halde gelegt, bis der nächste connect kommt. Die Connection muss dann zwar intern gesäubert werden, was etwas Zeit kostet, aber das geht schneller als eine neue TCP Verbindung zu einem remote host. Das mysqlInd_ms Plugin ist dann noch eine Nummer größer, aber auch der betreibt Connection Piools.
So. Warum erzähl ich das? Weil die Frage, wie man mit Connections umgeht, von diesen Rahmenbedingungen abhängt. Mir hat ein Programmierguru mal gesagt, man müsse Connections wie heiße Kartoffeln behandeln: Nehmen, benutzen und schnell wieder fallen lassen. Der Grund ist: Tut man das nicht, dann hat man eventuell ein Ressourcenleck, wenn man den Close vergisst. Diese Regel gilt aber nur, wenn man einen Connection-Pool unter der Haube hat. Ohne einen solchen Pool ist es sinnvoller, zu Beginn eines Requests EINE Connection aufzumachen, sie die ganze Zeit zu benutzen und sich drauf zu verlassen, dass PHP sie nach Ende der Requestbearbeitung automatisch schließt.
Eine zweite Connection kann man eventuell brauchen, wenn man zwei Query-Results zusammenmischen muss. Ich hab sowas schon programmiert, weil ich kein anständiges SQL für diesen Fall gebaut bekommen habe. Und auf einer Connection kann man meines Wissens nur ein offenes Result-Set haben.
Rolf