Start · Sprachen · PHP · Referenz · Pdo\Dblib

Pdo\Dblib

Klasse

PDO-Treiber für DB-Lib-basierte Datenbanken (Sybase ASE und Microsoft SQL Server) über die FreeTDS-Bibliothek.

seit PHP 8.4.0 Kategorie: db

Signatur

class Pdo\Dblib extends PDO

Beschreibung

Pdo\Dblib ist die spezialisierte PDO-Treiberklasse für den Zugriff auf Sybase ASE- und Microsoft SQL Server-Datenbanken über die FreeTDS-Bibliothek (DB-Lib). Sie erweitert PDO und stellt daher dieselbe objektorientierte Datenbankabstraktions-API bereit, ergänzt durch treiberspezifische Eigenschaften.

Der Treiber verwendet intern die FreeTDS-Bibliothek, die auf Unix/Linux-Systemen installiert sein muss. Die DSN-Zeichenkette beginnt mit dblib: und gibt Host, Datenbankname sowie optional Port an (z. B. dblib:host=localhost:1433;dbname=meineDB). Auf Windows-Systemen wird in der Regel der sqlsrv-Treiber bevorzugt.

Seit PHP 8.4 ist Pdo\Dblib als eigenständige, typisierte Klasse verfügbar und ersetzt die bisherige implizite Verwendung des pdo_dblib-Extensions über den generischen PDO-Konstruktor. Damit sind treiberspezifische Methoden und Attribute über die typsichere Klasse direkt zugreifbar.

Typische Einsatzgebiete sind Legacy-Migrationen von Sybase-Anwendungen, Integration mit Microsoft SQL Server auf Linux-Systemen sowie Szenarien, in denen kein nativer ODBC- oder sqlsrv-Treiber verfügbar ist.

Parameter

Name Typ Default Beschreibung
$dsn Pflicht string Data Source Name im Format dblib:host=hostname[:port];dbname=datenbankname[;charset=zeichensatz]. Gibt den Datenbankserver und die Zieldatenbank an.
$username string Benutzername für die Datenbankverbindung.
$password string Passwort des Datenbankbenutzers.
$options array [] Assoziatives Array mit treiberspezifischen PDO-Optionen, z. B. PDO::ATTR_ERRMODE oder PDO::DBLIB_ATTR_STRINGIFY_UNIQUEIDENTIFIER.

Beispiele

Verbindung zu MS SQL Server über DB-Lib herstellen

<?php
try {
    $pdo = new Pdo\Dblib(
        dsn: 'dblib:host=192.168.1.10:1433;dbname=Northwind;charset=UTF-8',
        username: 'sa',
        password: 'geheimesPasswort',
        options: [
            PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
            PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
        ]
    );

    $stmt = $pdo->prepare('SELECT TOP 5 CustomerID, CompanyName FROM Customers ORDER BY CompanyName');
    $stmt->execute();

    foreach ($stmt->fetchAll() as $row) {
        echo $row['CustomerID'] . ' – ' . $row['CompanyName'] . PHP_EOL;
    }
} catch (PDOException $e) {
    echo 'Verbindungsfehler: ' . $e->getMessage();
}
ALFKI – Alfreds Futterkiste ANATR – Ana Trujillo Emparedados y helados ANTON – Antonio Moreno Taquería AROUT – Around the Horn BERGS – Berglunds snabbköp

Prepared Statement mit Parametern und Transaktion

<?php
$pdo = new Pdo\Dblib(
    dsn: 'dblib:host=db-server;dbname=ShopDB',
    username: 'appuser',
    password: 's3cret'
);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

try {
    $pdo->beginTransaction();

    $insert = $pdo->prepare(
        'INSERT INTO Bestellungen (KundeID, Betrag, Datum) VALUES (:kundeId, :betrag, :datum)'
    );
    $insert->execute([
        ':kundeId' => 42,
        ':betrag'  => 199.99,
        ':datum'   => date('Y-m-d'),
    ]);

    $neueId = $pdo->lastInsertId();
    echo 'Neue Bestellungs-ID: ' . $neueId . PHP_EOL;

    $pdo->commit();
} catch (PDOException $e) {
    $pdo->rollBack();
    echo 'Fehler, Transaktion zurückgerollt: ' . $e->getMessage();
}
Neue Bestellungs-ID: 1057

// Wichtig · Fallstricke

FreeTDS erforderlich: Der Treiber setzt eine korrekt installierte und konfigurierte FreeTDS-Bibliothek auf dem Server voraus. Die Datei freetds.conf bzw. die Umgebungsvariable FREETDS steuert Server-Versionseinstellungen. Falsche TDS-Versionsangaben führen zu Verbindungs- oder Zeichensatzproblemen.

Sicherheit: Verwende stets Prepared Statements mit Platzhaltern, um SQL-Injection zu verhindern. Baue niemals Benutzereingaben direkt in SQL-Zeichenketten ein.

Zeichensatz: Insbesondere bei Umlauten und Sonderzeichen ist der DSN-Parameter charset=UTF-8 zu setzen und mit der FreeTDS-Konfiguration abzustimmen, da Konvertierungsfehler sonst zu Datenverlust führen können.

Windows: Auf Windows-Systemen wird stattdessen der pdo_sqlsrv-Treiber von Microsoft empfohlen, der aktiv gepflegt wird und modernere SQL-Server-Features unterstützt.

Verfügbarkeit: Die typisierte Klasse Pdo\Dblib ist erst ab PHP 8.4 verfügbar. In älteren PHP-Versionen wird der Treiber über den generischen PDO-Konstruktor mit dem DSN-Präfix dblib: angesprochen.