Heim  >  Artikel  >  Backend-Entwicklung  >  php – PDO-Verbindung und Verbindungsverwaltung

php – PDO-Verbindung und Verbindungsverwaltung

伊谢尔伦
伊谢尔伦Original
2016-11-22 09:36:531340Durchsuche

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(&#39;mysql:host=localhost;dbname=test&#39;, $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(&#39;mysql:host=localhost;dbname=test&#39;, $user, $pass);
        foreach($dbh->query(&#39;SELECT * from FOO&#39;) 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(&#39;mysql:host=localhost;dbname=test&#39;, $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(&#39;mysql:host=localhost;dbname=test&#39;, $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.


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn