Signatur
Beschreibung
db2_pconnect() stellt eine persistente Verbindung zu einer IBM DB2-Datenbank her. Im Gegensatz zu db2_connect() wird die Verbindung am Ende des PHP-Skripts nicht geschlossen, sondern im Verbindungs-Pool des Webservers gehalten und bei einem nachfolgenden Request mit identischen Verbindungsparametern wiederverwendet. Das reduziert den Verbindungsaufbau-Overhead erheblich, vor allem bei häufigen Datenbankzugriffen.
Der Parameter $database ist entweder ein im DB2-Katalog eingetragener Datenbankname (DSN-Alias) oder ein vollständiger IBM Data Server Driver-Verbindungsstring (z. B. DATABASE=mydb;HOSTNAME=localhost;PORT=50000;PROTOCOL=TCPIP;UID=user;PWD=pass;). $username und $password können null sein, wenn die Authentifizierungsdaten bereits im Verbindungsstring enthalten sind.
Über den optionalen $options-Array können erweiterte Verbindungsoptionen gesetzt werden, etwa DB2_AUTOCOMMIT_ON/DB2_AUTOCOMMIT_OFF für das Autocommit-Verhalten, Cursor-Typen oder Trust-Context-Einstellungen. Persistente Verbindungen teilen keinen Transaktionszustand zwischen Requests – jede neue Scriptausführung erhält eine saubere Verbindung aus dem Pool.
Bei persistenten Verbindungen ist Vorsicht geboten: Wurden in einem vorherigen Request serverseitige temporäre Objekte (z. B. globale temporäre Tabellen) angelegt oder benutzerdefinierte Einstellungen geändert, können diese in Folge-Requests noch sichtbar sein. Es empfiehlt sich daher, solche Objekte explizit am Ende eines Requests zu bereinigen.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $database Pflicht | string | Katalogisierter DB2-Datenbankname (DSN-Alias) oder ein vollständiger IBM Data Server Driver-Verbindungsstring im Format DATABASE=...;HOSTNAME=...;PORT=...;PROTOCOL=TCPIP;UID=...;PWD=...;. |
|
| $username Pflicht | ?string | null | Benutzername für die Datenbankverbindung. Kann null sein, wenn der Benutzername bereits im Verbindungsstring enthalten ist. |
| $password Pflicht | ?string | null | Passwort für die Datenbankverbindung. Kann null sein, wenn das Passwort bereits im Verbindungsstring enthalten ist. |
| $options | array | [] | Assoziatives Array mit optionalen Verbindungseinstellungen. Gültige Schlüssel sind z. B. autocommit (DB2_AUTOCOMMIT_ON oder DB2_AUTOCOMMIT_OFF), cursor, trusted_context oder trusted_user. |
Rückgabewert
db2_*-Funktionen verwendet werden kann. Im Fehlerfall wird false zurückgegeben; Fehlerdetails können mit db2_conn_errormsg() abgefragt werden.Beispiele
Persistente Verbindung über DSN-Alias
<?php
// Verbindung über einen im DB2-Katalog eingetragenen Alias
$conn = db2_pconnect('MYDB', 'db2user', 'geheimesPasswort');
if ($conn === false) {
echo 'Verbindungsfehler: ' . db2_conn_errormsg();
exit(1);
}
echo 'Verbindung erfolgreich hergestellt (persistent).' . PHP_EOL;
$result = db2_exec($conn, 'SELECT CURRENT DATE FROM sysibm.sysdummy1');
if ($result) {
$row = db2_fetch_assoc($result);
echo 'Aktuelles Datum: ' . $row['00001'] . PHP_EOL;
}
// Verbindung wird NICHT geschlossen – sie kehrt in den Pool zurück
Persistente Verbindung mit vollständigem Verbindungsstring und Autocommit aus
<?php
$dsn = 'DATABASE=SAMPLE;HOSTNAME=db2server.example.com;PORT=50000;PROTOCOL=TCPIP;UID=appuser;PWD=s3cret;';
$options = [
'autocommit' => DB2_AUTOCOMMIT_OFF,
];
$conn = db2_pconnect($dsn, null, null, $options);
if ($conn === false) {
echo 'Fehler: ' . db2_conn_errormsg();
exit(1);
}
// Transaktion manuell steuern
$stmt = db2_prepare($conn, 'INSERT INTO bestellungen (artikel_id, menge) VALUES (?, ?)');
db2_execute($stmt, [42, 5]);
db2_commit($conn);
echo 'Datensatz erfolgreich eingefügt und committed.' . PHP_EOL;
// Wichtig · Fallstricke
Sicherheit: Speichere Zugangsdaten (Benutzername, Passwort) niemals direkt im Quellcode. Nutze Umgebungsvariablen oder externe Konfigurationsdateien außerhalb des Webroot-Verzeichnisses.
Verbindungszustand: Da persistente Verbindungen zwischen Requests wiederverwendet werden, können serverseitige Sitzungsobjekte, geöffnete Cursor oder geänderte Datenbanksettings aus einem vorherigen Request noch aktiv sein. Bereinige solche Ressourcen am Ende jedes Requests explizit, um Seiteneffekte zu vermeiden.
Transaktionen: Wird ein Request mit einer offenen Transaktion beendet (kein explizites db2_commit() oder db2_rollback()), führt db2_pconnect() beim nächsten Abrufen der Verbindung aus dem Pool automatisch ein Rollback der ausstehenden Transaktion durch.
Verfügbarkeit: db2_pconnect() steht nur zur Verfügung, wenn die PECL-Erweiterung ibm_db2 installiert und aktiviert ist. Auf einigen Plattformen (z. B. unter CLI-SAPI) verhält sich db2_pconnect() identisch wie db2_connect(), da kein Verbindungs-Pool existiert.