Signatur
Beschreibung
Der PDO_ODBC DSN ist die Zeichenkette, die beim Erstellen einer PDO-Instanz als erstes Argument übergeben wird und die Verbindungsparameter für ODBC- oder DB2-Datenquellen festlegt. PDO_ODBC unterstützt drei verschiedene Treibervarianten: odbc (für ODBC-konforme Datenbanken), ibm (IBM DB2 über den IBM DB2 Universal Database Client) und unixODBC (über den unixODBC-Treibermanager).
Die grundlegende DSN-Form lautet odbc:DSN=meineDatenquelle;UID=benutzer;PWD=passwort. Alternativ kann ein vollständiger ODBC-Verbindungsstring angegeben werden, wie z. B. odbc:DRIVER={IBM DB2 ODBC DRIVER};HOSTNAME=localhost;PORT=50000;DATABASE=meineDB;PROTOCOL=TCPIP;UID=benutzer;PWD=passwort. Damit ist keine separate ODBC-DSN-Definition in der odbc.ini erforderlich.
Welcher Treiber verwendet wird, hängt von der PHP-Kompilierung und den installierten ODBC-Bibliotheken ab. Auf Unix-Systemen wird typischerweise unixODBC eingesetzt, auf Windows steht der native Windows-ODBC-Manager zur Verfügung. Die Konfiguration der Systemdatenquellen erfolgt über den ODBC-Datenquellen-Administrator (Windows) oder die Dateien /etc/odbcinst.ini und ~/.odbc.ini (Unix).
PDO_ODBC bietet damit eine portable Abstraktion über viele Datenbanksysteme hinweg, solange ein passender ODBC-Treiber vorhanden ist – darunter Microsoft SQL Server, IBM DB2, Oracle, Sybase und viele weitere.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $DSN | string | Name einer in der ODBC-Konfiguration definierten Datenquelle (Data Source Name), z. B. DSN=MeineDatenquelle. |
|
| $DRIVER | string | Name des ODBC-Treibers für Treiber-basierte Verbindungsstrings, z. B. DRIVER={IBM DB2 ODBC DRIVER}. |
|
| $HOSTNAME | string | Hostname oder IP-Adresse des Datenbankservers. | |
| $PORT | int | TCP-Port des Datenbankservers, z. B. 50000 für IBM DB2. |
|
| $DATABASE | string | Name der Zieldatenbank auf dem Server. | |
| $PROTOCOL | string | TCPIP | Verbindungsprotokoll, bei IBM DB2 typischerweise TCPIP. |
| $UID | string | Benutzername für die Datenbankverbindung. Kann alternativ als zweites Argument an den PDO-Konstruktor übergeben werden. |
|
| $PWD | string | Passwort für die Datenbankverbindung. Kann alternativ als drittes Argument an den PDO-Konstruktor übergeben werden. |
Rückgabewert
Beispiele
Verbindung über einen ODBC-DSN-Aliasnamen
<?php
// Voraussetzung: Eine ODBC-Datenquelle 'MeineDSN' ist systemweit konfiguriert
try {
$pdo = new PDO(
'odbc:DSN=MeineDSN',
'datenbankbenutzer',
'geheimesPasswort'
);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$stmt = $pdo->query('SELECT * FROM kunden LIMIT 5');
foreach ($stmt as $zeile) {
echo $zeile['name'] . PHP_EOL;
}
} catch (PDOException $e) {
echo 'Verbindungsfehler: ' . $e->getMessage();
}
Verbindung zu IBM DB2 über vollständigen ODBC-Verbindungsstring
<?php
// Direkte Verbindung ohne vordefinierten DSN-Eintrag
$dsn = 'odbc:DRIVER={IBM DB2 ODBC DRIVER};'
. 'HOSTNAME=db2.beispiel.de;'
. 'PORT=50000;'
. 'DATABASE=MEINEDB;'
. 'PROTOCOL=TCPIP;'
. 'UID=dbbenutzer;'
. 'PWD=geheim';
try {
$pdo = new PDO($dsn);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$stmt = $pdo->prepare('SELECT VORNAME, NACHNAME FROM MITARBEITER WHERE ABTEILUNG = ?');
$stmt->execute(['IT']);
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
printf('%s %s%s', $row['VORNAME'], $row['NACHNAME'], PHP_EOL);
}
} catch (PDOException $e) {
echo 'Fehler: ' . $e->getMessage();
}
Verbindung zu Microsoft SQL Server über ODBC
<?php
$dsn = 'odbc:DRIVER={ODBC Driver 18 for SQL Server};'
. 'SERVER=sqlserver.beispiel.de,1433;'
. 'DATABASE=ShopDB;'
. 'Encrypt=yes;'
. 'TrustServerCertificate=no';
try {
$pdo = new PDO($dsn, 'sa', 'MeinPasswort123!');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$count = $pdo->query('SELECT COUNT(*) FROM Bestellungen')->fetchColumn();
echo 'Anzahl Bestellungen: ' . $count . PHP_EOL;
} catch (PDOException $e) {
echo 'Verbindungsfehler: ' . $e->getMessage();
}
// Wichtig · Fallstricke
Sicherheitshinweis: Zugangsdaten (UID/PWD) sollten niemals direkt im Quellcode oder in versionierten Dateien hinterlegt werden. Verwende stattdessen Umgebungsvariablen oder gesicherte Konfigurationsdateien außerhalb des Webroot-Verzeichnisses.
Treiberverfügbarkeit: PDO_ODBC muss bei der PHP-Kompilierung mit der Option --with-pdo-odbc aktiviert werden. Auf vielen Linux-Distributionen ist das Paket php-odbc oder php8.x-odbc separat zu installieren. Der passende ODBC-Treiber für die Zieldatenbank muss ebenfalls installiert und registriert sein.
Encoding/Zeichensatz: Bei Umlauten oder Sonderzeichen kann es je nach ODBC-Treiber und Datenbanksystem zu Kodierungsproblemen kommen. Prüfe die Treibereinstellungen und ggf. die Option CharSet im Verbindungsstring.
Plattformunterschiede: Der vollständige DSN-String und die Treibernamen (DRIVER={...}) unterscheiden sich je nach Betriebssystem und installierten Treibern. Auf Windows wird oft der systemeigene ODBC-Manager verwendet, auf Linux unixODBC.