Signatur
Beschreibung
Der PDO_DBLIB-Treiber ermöglicht PHP-Anwendungen, über die FreeTDS-Bibliothek eine Verbindung zu Microsoft SQL Server- und Sybase-Datenbanken herzustellen. Der DSN (Data Source Name) legt dabei Serveradresse, Port, Datenbankname und Zeichensatz fest.
Das DSN-Format beginnt mit dem Präfix sybase:, mssql: oder dblib:, gefolgt von Schlüssel-Wert-Paaren. Welches Präfix verfügbar ist, hängt von der Compilierung des PDO_DBLIB-Treibers ab. Auf den meisten Systemen wird dblib: bevorzugt. Typische Parameter sind host, dbname, charset und appname.
Der Treiber stützt sich auf die FreeTDS-Bibliothek, weshalb zusätzliche Konfigurationen in der Datei freetds.conf möglich sind, etwa zur Auswahl des TDS-Protokoll-Versions. Für moderne SQL-Server-Verbindungen unter Linux und macOS ist PDO_DBLIB oft die einzig verfügbare PDO-Option neben dem PDO_ODBC-Ansatz.
Bitte beachten: Auf Windows-Systemen wird stattdessen üblicherweise der PDO_SQLSRV-Treiber von Microsoft empfohlen, da dieser aktiv gewartet wird und modernere SQL-Server-Features unterstützt.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $host | string | localhost | Hostname oder IP-Adresse des Datenbankservers. Kann optional einen Port im Format host:port enthalten. |
| $dbname | string | Name der Zieldatenbank auf dem Server. | |
| $charset | string | Zeichensatz für die Verbindung, z. B. UTF-8. Wird direkt an FreeTDS weitergereicht. |
|
| $appname | string | Anwendungsname, der in den SQL-Server-Prozesslisten angezeigt wird. Nützlich für die Diagnose auf dem Server. | |
| $secure | int | 0 | Aktiviert verschlüsselte Verbindungen, sofern von der FreeTDS-Version unterstützt (1 = aktiviert). |
Rückgabewert
PDO-Objekt zurück, das die aktive Datenbankverbindung repräsentiert. Bei Verbindungsfehlern wird eine PDOException geworfen.Beispiele
Grundlegende Verbindung zu einem Microsoft SQL Server
<?php
$dsn = 'dblib:host=sqlserver.example.com:1433;dbname=MeineDatenbank;charset=UTF-8';
$benutzer = 'sa';
$passwort = 'geheim';
try {
$pdo = new PDO($dsn, $benutzer, $passwort);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$stmt = $pdo->query('SELECT TOP 5 Name FROM Kunden ORDER BY Name');
foreach ($stmt as $zeile) {
echo $zeile['Name'] . PHP_EOL;
}
} catch (PDOException $e) {
echo 'Verbindungsfehler: ' . $e->getMessage();
}
Sybase-Verbindung mit appname und Fehlerbehandlung
<?php
$dsn = 'sybase:host=sybase.intern;dbname=Produktion;appname=MeinPHPScript';
try {
$pdo = new PDO($dsn, 'dbuser', 'dbpass', [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
]);
$stmt = $pdo->prepare('SELECT ProduktID, Bezeichnung FROM Produkte WHERE Preis > :preis');
$stmt->execute([':preis' => 100.00]);
$produkte = $stmt->fetchAll();
foreach ($produkte as $p) {
printf("[%d] %s\n", $p['ProduktID'], $p['Bezeichnung']);
}
} catch (PDOException $e) {
error_log('DB-Fehler: ' . $e->getMessage());
echo 'Datenbankfehler, bitte später versuchen.';
}
// Wichtig · Fallstricke
Sicherheit: Verwende grundsätzlich vorbereitete Statements (prepare() + execute()) mit Platzhaltern, um SQL-Injection-Angriffe zu verhindern. Niemals Benutzereingaben direkt in SQL-Strings interpolieren.
FreeTDS-Version: Die unterstützten TDS-Protokollversionen hängen von der installierten FreeTDS-Version ab. Für SQL Server 2012 und neuer empfiehlt sich TDS-Version 7.3 oder höher, konfigurierbar in /etc/freetds/freetds.conf unter dem Schlüssel tds version.
Windows: Auf Windows-Plattformen ist PDO_DBLIB oft nicht verfügbar. Hier sollte stattdessen der offizielle Microsoft PHP Driver for SQL Server (PDO_SQLSRV) eingesetzt werden.
Deprecation: Das Präfix mssql: gilt in neueren Versionen als veraltet; dblib: ist die empfohlene Schreibweise.