Start · Sprachen · PHP · Referenz · Pdo\Odbc

Pdo\Odbc

Klasse

PDO-Unterklasse für ODBC-Verbindungen, die treiberabhängige Cursor-Bibliotheks-Optionen und erweiterte ODBC-Funktionalität steuert.

seit PHP 8.4.0 Kategorie: db

Signatur

class Pdo\Odbc extends PDO

Beschreibung

Pdo\Odbc ist eine spezialisierte Unterklasse von PDO, die ab PHP 8.4 als dedizierte Klasse für ODBC-Datenbankverbindungen eingeführt wurde. Sie ermöglicht den Zugriff auf ODBC-Datenquellen über den standardisierten PDO-Interface und ergänzt diesen um ODBC-spezifische Attribute und Cursor-Bibliotheks-Steuerung.

Über ODBC (Open Database Connectivity) können eine Vielzahl von Datenbanksystemen angesprochen werden – darunter Microsoft SQL Server, IBM DB2, Oracle, MySQL, PostgreSQL und viele weitere –, sofern ein passender ODBC-Treiber installiert ist. Pdo\Odbc abstrahiert die Treiberunterschiede und erlaubt dennoch treiberabhängige Feineinstellungen, insbesondere hinsichtlich der ODBC-Cursor-Bibliothek.

Ein zentrales Merkmal ist die Kontrolle über die ODBC-Cursor-Bibliothek: Mit dem Attribut Pdo\Odbc::ATTR_USE_CURSOR_LIBRARY lässt sich steuern, ob die erweiterte ODBC-Cursor-Bibliothek des Treibers genutzt wird oder nicht. Dies beeinflusst z. B. die Unterstützung für scrollbare Cursor und kann je nach Treiber und Anwendungsfall einen erheblichen Unterschied in Funktionalität und Performance bedeuten.

Die Verwendung von Pdo\Odbc statt des generischen PDO-Objekts mit ODBC-DSN ist empfohlen, wenn ODBC-spezifische Attribute gesetzt oder abgefragt werden sollen. Für einfache Abfragen ohne spezifische ODBC-Konfiguration verhält sich die Klasse identisch zu PDO.

Parameter

Name Typ Default Beschreibung
$dsn Pflicht string Der Data Source Name (DSN) für die ODBC-Verbindung, z. B. odbc:DSN=MeineDatenquelle oder ein vollständiger ODBC-Verbindungsstring wie odbc:Driver={SQL Server};Server=localhost;Database=test;.
$username string|null null Benutzername für die Datenbankverbindung. Kann null sein, wenn die Authentifizierung im DSN enthalten ist.
$password string|null null Passwort für die Datenbankverbindung. Kann null sein, wenn die Authentifizierung im DSN enthalten ist.
$options array|null null Ein assoziatives Array mit treiberspezifischen Verbindungsoptionen. Unterstützt alle PDO::ATTR_*-Konstanten sowie ODBC-spezifische Attribute wie Pdo\Odbc::ATTR_USE_CURSOR_LIBRARY.

Beispiele

Verbindung zu einer ODBC-Datenquelle herstellen

<?php
try {
    $pdo = new Pdo\Odbc(
        dsn: 'odbc:DSN=MeineDatenquelle',
        username: 'benutzer',
        password: 'geheim',
        options: [
            PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
            PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
        ]
    );

    $stmt = $pdo->query('SELECT * FROM kunden LIMIT 5');
    foreach ($stmt as $zeile) {
        echo $zeile['name'] . PHP_EOL;
    }
} catch (PDOException $e) {
    echo 'Verbindungsfehler: ' . $e->getMessage();
}

ODBC-Cursor-Bibliothek gezielt steuern

<?php
try {
    // ODBC_CURSOR_USE: Erweiterte Cursor-Bibliothek aktivieren
    $pdo = new Pdo\Odbc(
        dsn: 'odbc:Driver={SQL Server};Server=localhost;Database=testdb;',
        username: 'sa',
        password: 'geheim',
        options: [
            PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
            // Cursor-Bibliothek: SQL_CUR_USE_DRIVER (treibernativer Cursor)
            Pdo\Odbc::ATTR_USE_CURSOR_LIBRARY => Pdo\Odbc::SQL_CUR_USE_DRIVER,
        ]
    );

    // Scrollbaren Cursor für Vorwärts- und Rückwärtsnavigation nutzen
    $stmt = $pdo->prepare(
        'SELECT id, name FROM produkte ORDER BY name',
        [PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL]
    );
    $stmt->execute();

    // Letzten Datensatz abrufen
    $letzter = $stmt->fetch(PDO::FETCH_ASSOC, PDO::FETCH_ORI_LAST);
    echo 'Letztes Produkt: ' . $letzter['name'] . PHP_EOL;

    // Cursor-Einstellung auslesen
    $cursorSetting = $pdo->getAttribute(Pdo\Odbc::ATTR_USE_CURSOR_LIBRARY);
    echo 'Cursor-Bibliothek-Modus: ' . $cursorSetting . PHP_EOL;
} catch (PDOException $e) {
    echo 'Fehler: ' . $e->getMessage();
}

// Wichtig · Fallstricke

Cursor-Bibliothek-Konstanten: Pdo\Odbc stellt drei Konstanten für ATTR_USE_CURSOR_LIBRARY bereit:

  • Pdo\Odbc::SQL_CUR_USE_IF_NEEDED – Cursor-Bibliothek nur bei Bedarf verwenden (Standard).
  • Pdo\Odbc::SQL_CUR_USE_ODBC – Immer die ODBC-Cursor-Bibliothek verwenden.
  • Pdo\Odbc::SQL_CUR_USE_DRIVER – Immer den nativen Treiber-Cursor verwenden.

Sicherheitshinweis: ODBC-Verbindungsstrings können sensible Zugangsdaten enthalten. Vermeiden Sie es, DSN-Strings mit Passwörtern in Versionsverwaltungssystemen zu speichern. Nutzen Sie stattdessen Umgebungsvariablen oder separate Konfigurationsdateien außerhalb des Webroot.

Treiberabhängigkeit: Das Verhalten der Cursor-Bibliothek ist stark treiberabhängig. Nicht alle ODBC-Treiber unterstützen alle Cursor-Modi. Testen Sie Ihre Konfiguration gründlich mit dem jeweiligen Zieltreiber.

PHP-Version: Pdo\Odbc als eigenständige Klasse ist erst ab PHP 8.4 verfügbar. In älteren PHP-Versionen wird ODBC über den generischen PDO-Konstruktor mit dem odbc:-DSN-Präfix angesprochen, ohne Zugriff auf Pdo\Odbc-spezifische Konstanten.