Start · Sprachen · PHP · Referenz · PDO_DBLIB DSN

PDO_DBLIB DSN

Funktion

Definiert den DSN-String für PDO-Verbindungen zu Microsoft SQL Server und Sybase über den DBLIB-Treiber.

seit PHP 5.1.0 Kategorie: db

Signatur

PDO_DBLIB DSN

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

Typ
PDO
Beschreibung
Gibt ein 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();
}
Anna Müller Bernd Schmidt Clara Weiß Dietmar Braun Erika Lange

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.';
}
[12] Notebook Pro [37] Server-Rack Deluxe

// 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.