Heim > Artikel > Backend-Entwicklung > php – PDO-Verbindung und Verbindungsverwaltung
Die Verbindung wird durch Erstellen einer Instanz der PDO-Basisklasse hergestellt. Unabhängig davon, welcher Treiber verwendet wird, wird der PDO-Klassenname verwendet. Der Konstruktor erhält Parameter, die die Datenbankquelle (sog. DSN) und ggf. den Benutzernamen und das Passwort (falls vorhanden) angeben.
Beispiel #1 Herstellen einer Verbindung zu MySQL
<?php $dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass); ?>
Wenn Verbindungsfehler auftreten, wird ein PDOException-Ausnahmeobjekt ausgelöst. Wenn Sie Fehlerbedingungen behandeln möchten, können Sie die Ausnahme abfangen oder sie dem über set_Exception_handler() festgelegten globalen Ausnahmehandler der Anwendung überlassen.
Beispiel #2 Umgang mit Verbindungsfehlern
<?php try { $dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass); foreach($dbh->query('SELECT * from FOO') as $row) { print_r($row); } $dbh = null; } catch (PDOException $e) { print "Error!: " . $e->getMessage() . "<br/>"; die(); } ?>
Wenn die Anwendung die Ausnahme im PDO-Konstruktor nicht abfängt, besteht die Standardaktion der Zend-Engine darin, das Skript zu beenden und eine anzuzeigen Backtrace. Mögliche Offenlegung vollständiger Datenbankverbindungsdetails, einschließlich Benutzername und Passwort. Es liegt daher in der Verantwortung, Ausnahmen entweder explizit (über die Catch-Anweisung) oder implizit (über set_Exception_handler()) abzufangen.
Nach erfolgreicher Verbindung der Daten wird eine Instanz der PDO-Klasse an das Skript zurückgegeben. Diese Verbindung bleibt während des Lebenszyklus des PDO-Objekts aktiv. Um die Verbindung zu schließen, müssen Sie das Objekt zerstören, um sicherzustellen, dass alle verbleibenden Verweise darauf gelöscht werden. Sie können der Objektvariablen einen NULL-Wert zuweisen. Wenn Sie dies nicht explizit tun, schließt PHP die Verbindung am Ende des Skripts automatisch.
Beispiel #3 Eine Verbindung schließen
<?php $dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass); // 在此使用连接 // 现在运行完成,在此关闭连接 $dbh = null; ?>
Viele Webanwendungen profitieren von der Verwendung dauerhafter Verbindungen zu Datenbankdiensten. Permanente Verbindungen werden nach Beendigung des Skripts nicht geschlossen, sondern zwischengespeichert und wiederverwendet, wenn eine andere Skript-Verbindungsanforderung dieselben Anmeldeinformationen verwendet. Persistentes Verbindungs-Caching kann Webanwendungen schneller machen, da der Mehraufwand für den Aufbau einer neuen Verbindung jedes Mal vermieden wird, wenn ein Skript mit der Datenbank kommunizieren muss.
Beispiel #4 Persistente Verbindung
<?php $dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass, array( PDO::ATTR_PERSISTENT => true )); ?>
Wenn Sie persistente Verbindungen verwenden möchten, müssen Sie PDO::ATTR_PERSISTENT im Treiberoptionsarray festlegen, das an den PDO-Konstruktor übergeben wird. Wenn dieses Attribut nach der Initialisierung des Objekts mit PDO::setAttribute() festgelegt wird, verwendet der Treiber keine dauerhaften Verbindungen.
Wenn Sie den PDO-ODBC-Treiber verwenden und die ODBC-Bibliothek ODBC-Verbindungspooling unterstützt (es gibt zwei Ansätze, unixODBC und Windows; möglicherweise gibt es noch mehr), wird empfohlen, keine dauerhaften PDO-Verbindungen zu verwenden, sondern die zu belassen Verbindungscache zur ODBC-Verbindungspoolschichtverarbeitung. Der ODBC-Verbindungspool wird im Prozess mit anderen Modulen geteilt; wenn PDO aufgefordert wird, eine Verbindung zwischenzuspeichern, wird die Verbindung nie an den ODBC-Verbindungspool zurückgegeben, wodurch zusätzliche Verbindungen erstellt werden, um andere Module zu bedienen.