Nur eine ziemlich einfache Frage in Bezug auf PDO im Vergleich zu MySQLi.
Mit MySQLi können Sie die Verbindung schließen, indem Sie Folgendes tun:
$this->connection->close();
Bei PDO heißt es jedoch, dass Sie die Verbindung öffnen, indem Sie:
$this->connection = new PDO();
aber um die Verbindung zu schließen, stellen Sie sie ein null
.
$this->connection = null;
Ist das richtig und wird dadurch die PDO-Verbindung tatsächlich freigegeben? (Ich weiß, dass es so funktioniert, wie es eingestellt ist null
.) Ich meine, mit MySQLi müssen Sie eine Funktion ( close
) aufrufen , um die Verbindung zu schließen. Ist PDO so einfach wie = null
das Trennen? Oder gibt es eine Funktion zum Schließen der Verbindung?
Antworten:
Laut Dokumentation sind Sie korrekt ( http://php.net/manual/en/pdo.connections.php ):
Beachten Sie, dass beim Initialisieren des PDO-Objekts als dauerhafte Verbindung die Verbindung nicht automatisch geschlossen wird.
quelle
Note that if you initialise the PDO object as a persistent connection it will not automatically close the connection
Aber wenn eine Verbindung dauerhaft ist und ich sie explizit mit NULL aufrufe, bevor das Skript endet, wird sie geschlossen, auch wenn sie dauerhaft ist, richtig?quelle
Es ist mehr als nur das Setzen der Verbindung auf Null. Das mag in der Dokumentation stehen, aber das ist nicht die Wahrheit für MySQL. Die Verbindung bleibt etwas länger bestehen (ich habe 60s gehört, aber nie getestet)
Wenn Sie hier die vollständige Erklärung wünschen, lesen Sie diesen Kommentar zu den Verbindungen https://www.php.net/manual/en/pdo.connections.php#114822
Um das Schließen der Verbindung zu erzwingen, müssen Sie so etwas tun
quelle
Ich habe eine abgeleitete Klasse erstellt, um eine selbstdokumentierendere Anweisung anstelle von "$ conn = null;" zu erhalten.
So kann ich meinen Code aufrufen zwischen:
quelle
closeConnection
sollte jedoch nicht wissen, dass er einen Verweis auf die Variable kopieren muss, anstatt das Objekt zuzuweisen . Mit anderen Worten, Ihre Art, eine enge PDO-Funktion zu codieren, hat schlimme Nebenwirkungen und macht sie unzuverlässig. Die einzige Möglichkeit, dies zu tun, besteht darin,closeConnection
zu überprüfen, wie viele Verweise auf das PDO-Objekt im Code vorhanden sind, und zu werfen, falls mehr als 1 vorhanden ist.Vollständiges Beispiel mit benutzerdefinierter Klasse PDO2.
quelle