Start · Sprachen · PHP · Referenz · db2_pclose

db2_pclose

Funktion

Schließt eine dauerhafte Datenbankverbindung, die zuvor mit <code>db2_pconnect()</code> geöffnet wurde.

seit PHP 5.2.0 Kategorie: db

Signatur

db2_pclose(resource $connection): bool

Beschreibung

db2_pclose() schließt eine persistente Datenbankverbindung, die mit db2_pconnect() hergestellt wurde. Im Gegensatz zu regulären Verbindungen, die mit db2_connect() erzeugt wurden und automatisch am Ende eines Skripts geschlossen werden, bleiben persistente Verbindungen normalerweise zwischen mehreren Anfragen bestehen. Mit db2_pclose() kann man eine solche Verbindung explizit schließen und damit die zugehörigen Ressourcen freigeben.

Diese Funktion ist besonders nützlich, wenn eine persistente Verbindung in einen ungültigen Zustand geraten ist – etwa nach einem Datenbankfehler oder einem Verbindungsabbruch – und explizit neu aufgebaut werden soll. In normalen Szenarien ist ein explizites Schließen persistenter Verbindungen nicht notwendig, da der Verbindungs-Pool des Webservers dies übernimmt.

Beachte, dass das Schließen einer persistenten Verbindung mit db2_pclose() die Verbindung vollständig aus dem Verbindungs-Pool entfernt. Eine spätere Anfrage kann dann nicht mehr auf diese Verbindung zurückgreifen und muss eine neue Verbindung aufbauen. Daher sollte diese Funktion nur dann eingesetzt werden, wenn das Schließen tatsächlich erforderlich ist.

Parameter

Name Typ Default Beschreibung
$connection Pflicht resource Eine aktive persistente Datenbankverbindungs-Ressource, die mit db2_pconnect() erzeugt wurde.

Rückgabewert

Typ
bool
Beschreibung
Gibt true zurück, wenn die Verbindung erfolgreich geschlossen wurde, andernfalls false.

Beispiele

Persistente Verbindung öffnen und explizit schließen

<?php
// Persistente Verbindung zur IBM Db2-Datenbank herstellen
$conn = db2_pconnect('SAMPLE', 'db2inst1', 'geheim');

if ($conn) {
    echo "Verbindung erfolgreich hergestellt.\n";

    // Datenbankoperationen durchführen
    $result = db2_exec($conn, 'SELECT COUNT(*) AS anzahl FROM mitarbeiter');
    if ($result) {
        $row = db2_fetch_assoc($result);
        echo "Anzahl Mitarbeiter: " . $row['ANZAHL'] . "\n";
    }

    // Persistente Verbindung explizit schließen
    $closed = db2_pclose($conn);
    if ($closed) {
        echo "Persistente Verbindung wurde erfolgreich geschlossen.\n";
    } else {
        echo "Fehler beim Schließen der Verbindung.\n";
    }
} else {
    echo "Verbindung fehlgeschlagen: " . db2_conn_errormsg() . "\n";
}
?>
Verbindung erfolgreich hergestellt. Anzahl Mitarbeiter: 42 Persistente Verbindung wurde erfolgreich geschlossen.

Fehlerhafte persistente Verbindung zurücksetzen

<?php
// Persistente Verbindung herstellen
$conn = db2_pconnect('SAMPLE', 'db2inst1', 'geheim');

if ($conn) {
    // Prüfen, ob die Verbindung noch aktiv ist
    if (!db2_ping($conn)) {
        echo "Verbindung ist nicht mehr aktiv. Wird geschlossen und neu aufgebaut.\n";

        // Ungültige persistente Verbindung schließen
        db2_pclose($conn);

        // Neue persistente Verbindung aufbauen
        $conn = db2_pconnect('SAMPLE', 'db2inst1', 'geheim');
        if ($conn) {
            echo "Neue Verbindung erfolgreich hergestellt.\n";
        } else {
            echo "Fehler beim Neuaufbau: " . db2_conn_errormsg() . "\n";
        }
    } else {
        echo "Verbindung ist aktiv.\n";
    }
} else {
    echo "Verbindungsaufbau fehlgeschlagen.\n";
}
?>
Verbindung ist aktiv.

// Wichtig · Fallstricke

Achtung: db2_pclose() ist nur auf IBM Db2-Erweiterungen verfügbar und steht nicht für alle Datenbankverbindungstypen zur Verfügung. Die Funktion ist auf persistente Verbindungen beschränkt, die mit db2_pconnect() erstellt wurden – sie kann nicht für reguläre Verbindungen aus db2_connect() verwendet werden.

Da persistente Verbindungen vom Webserver-Prozess und nicht vom PHP-Skript verwaltet werden, kann das explizite Schließen einer solchen Verbindung Auswirkungen auf andere gleichzeitige Anfragen haben, die denselben Verbindungs-Pool nutzen. Im produktiven Einsatz sollte db2_pclose() daher nur mit Bedacht eingesetzt werden.