Signatur
Beschreibung
Der PDO_IBM DSN (Data Source Name) ist ein spezieller Verbindungsstring, der beim Erstellen einer PDO-Instanz mit dem IBM-Datenbanktreiber verwendet wird. Er legt fest, zu welchem IBM-Datenbankserver, welchem Port und welcher Datenbank eine Verbindung aufgebaut werden soll.
Es gibt zwei Varianten des DSN-Formats: Ein DSN-Alias, der auf einen vorkonfigurierten Eintrag in der DB2-Clientkonfigurationsdatei (db2cli.ini oder Katalog) verweist, sowie ein vollständiger DSN, der Hostname, Port, Protokoll und Datenbankname direkt enthält. Die vollständige Form ist portabler und erfordert keine lokale Clientkonfiguration.
Das DSN-Präfix lautet ibm:. Danach folgen entweder nur der Katalog-Alias oder ein DRIVER-Verbindungsstring mit Schlüssel-Wert-Paaren wie HOSTNAME, PORT, DATABASE und PROTOCOL.
Sicherheitshinweis: Zugangsdaten (Benutzername und Passwort) sollten niemals in den DSN-String eingebettet werden, sondern als separate Parameter an den PDO-Konstruktor übergeben werden, um eine unbeabsichtigte Offenlegung in Logs oder Fehlerausgaben zu vermeiden.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $DSN-Präfix Pflicht | string | Muss immer ibm: lauten. Leitet den IBM-spezifischen Teil des DSN ein. |
|
| $DRIVER | string | Name des zu verwendenden IBM-Treibers, z. B. {IBM DB2 ODBC DRIVER}. Nur bei vollständigem DSN-Format erforderlich. |
|
| $HOSTNAME | string | Hostname oder IP-Adresse des Datenbankservers, z. B. db.example.com. |
|
| $PORT | int | 50000 | TCP-Port des Datenbankservers. Standard für IBM DB2 ist 50000. |
| $DATABASE | string | Name der Zieldatenbank auf dem IBM-Datenbankserver. | |
| $PROTOCOL | string | TCPIP | Netzwerkprotokoll für die Verbindung. Typischerweise TCPIP. |
Rückgabewert
Beispiele
Verbindung über DSN-Alias (Katalog-Eintrag)
<?php
// Voraussetzung: 'MYDB' ist als Alias im DB2-Client-Katalog registriert
try {
$dsn = 'ibm:MYDB';
$pdo = new PDO($dsn, 'db2user', 'geheimesPasswort');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
echo 'Verbindung via DSN-Alias erfolgreich!';
} catch (PDOException $e) {
echo 'Verbindungsfehler: ' . $e->getMessage();
}
Verbindung über vollständigen DSN-String
<?php
// Vollständiger DSN ohne lokale Katalogkonfiguration
try {
$dsn = 'ibm:DRIVER={IBM DB2 ODBC DRIVER};'
. 'DATABASE=SAMPLE;'
. 'HOSTNAME=db.example.com;'
. 'PORT=50000;'
. 'PROTOCOL=TCPIP;';
$pdo = new PDO($dsn, 'db2user', 'geheimesPasswort');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$stmt = $pdo->query('SELECT TABNAME FROM SYSCAT.TABLES FETCH FIRST 3 ROWS ONLY');
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
echo $row['TABNAME'] . PHP_EOL;
}
} catch (PDOException $e) {
echo 'Verbindungsfehler: ' . $e->getMessage();
}
// Wichtig · Fallstricke
Sicherheit: Benutzername und Passwort niemals direkt in den DSN-String einbetten. Stattdessen als zweiten und dritten Parameter des PDO-Konstruktors übergeben, da DSN-Strings in PHP-Fehlermeldungen, Logs und Stack-Traces ausgegeben werden können.
Treiber-Voraussetzung: Der PDO_IBM-Treiber ist nicht in der Standard-PHP-Distribution enthalten. Er muss separat installiert werden (z. B. via PECL: pecl install pdo_ibm). Außerdem muss das IBM Data Server Client SDK oder IBM DB2 Connect auf dem Server installiert sein.
Kompatibilität: PDO_IBM unterstützt IBM DB2 LUW, IBM DB2 for z/OS sowie IBM Informix. Bei Informix lautet das Präfix ebenfalls ibm:, der Verbindungsstring kann jedoch abweichen. Die genaue Syntax kann je nach Treiber-Version variieren.