Start · Sprachen · PHP · Referenz · odbc_data_source

odbc_data_source

Funktion

Gibt Informationen über verfügbare ODBC-Datenquellen (DSNs) zurück, die auf dem System konfiguriert sind.

seit PHP 4.3.0 Kategorie: db

Signatur

odbc_data_source(resource $odbc, int $fetch_type): array|false

Beschreibung

odbc_data_source() ermöglicht es, eine Liste aller auf dem System registrierten ODBC-Datenquellennamen (Data Source Names, DSNs) abzurufen. Die Funktion liefert bei jedem Aufruf jeweils einen Datensatz und muss in einer Schleife aufgerufen werden, bis sie false zurückgibt, um alle verfügbaren DSNs zu durchlaufen.

Der Parameter fetch_type steuert, ob System-DSNs (SQL_FETCH_FIRST) oder Benutzer-DSNs (SQL_FETCH_NEXT) abgerufen werden. Für einen vollständigen Durchlauf ruft man die Funktion zunächst mit SQL_FETCH_FIRST auf, um den ersten Eintrag zu erhalten, und anschließend wiederholt mit SQL_FETCH_NEXT, bis false zurückgeliefert wird.

Das Ergebnis-Array enthält die Schlüssel name (Name der Datenquelle) und description (Beschreibung der Datenquelle). Diese Funktion ist besonders nützlich, um in Administrations- oder Konfigurations-Tools dynamisch verfügbare Datenbankverbindungen aufzulisten, ohne die DSN-Namen hartcodieren zu müssen.

Die Funktion setzt eine aktive ODBC-Verbindung voraus, die über odbc_connect() oder odbc_pconnect() hergestellt wurde. Sie ist Teil der PHP-ODBC-Erweiterung, die für den plattformübergreifenden Datenbankzugriff genutzt wird.

Parameter

Name Typ Default Beschreibung
$odbc Pflicht resource Eine aktive ODBC-Verbindungsressource, die zuvor mit odbc_connect() oder odbc_pconnect() erstellt wurde.
$fetch_type Pflicht int Gibt an, welcher DSN-Eintrag abgerufen werden soll. Mögliche Werte sind SQL_FETCH_FIRST (erster Eintrag der Liste) und SQL_FETCH_NEXT (nächster Eintrag in der Liste). Zur Iteration über alle DSNs zunächst SQL_FETCH_FIRST, danach wiederholt SQL_FETCH_NEXT verwenden.

Rückgabewert

Typ
array|false
Beschreibung
Gibt ein assoziatives Array mit den Schlüsseln name (DSN-Name) und description (Beschreibung der Datenquelle) zurück. Wenn keine weiteren Datenquellen vorhanden sind oder ein Fehler auftritt, wird false zurückgegeben.

Beispiele

Alle verfügbaren ODBC-Datenquellen auflisten

<?php
// Verbindung zu einer beliebigen vorhandenen ODBC-DSN herstellen
$conn = odbc_connect('MeineDSN', 'benutzer', 'passwort');

if (!$conn) {
    die('Verbindung fehlgeschlagen: ' . odbc_errormsg());
}

// Ersten DSN-Eintrag abrufen
$dsn = odbc_data_source($conn, SQL_FETCH_FIRST);

if ($dsn !== false) {
    echo "Verfügbare ODBC-Datenquellen:" . PHP_EOL;
    do {
        echo "Name: " . $dsn['name'] . " | Beschreibung: " . $dsn['description'] . PHP_EOL;
        // Nächsten Eintrag abrufen
        $dsn = odbc_data_source($conn, SQL_FETCH_NEXT);
    } while ($dsn !== false);
} else {
    echo "Keine ODBC-Datenquellen gefunden." . PHP_EOL;
}

odbc_close($conn);
Verfügbare ODBC-Datenquellen: Name: MeineDSN | Beschreibung: Meine Produktionsdatenbank Name: TestDSN | Beschreibung: Testdatenbank

DSN-Liste in ein Array einlesen

<?php
$conn = odbc_connect('MeineDSN', 'benutzer', 'passwort');

if (!$conn) {
    die('Verbindung fehlgeschlagen.');
}

$dsnListe = [];
$dsn = odbc_data_source($conn, SQL_FETCH_FIRST);

while ($dsn !== false) {
    $dsnListe[] = $dsn;
    $dsn = odbc_data_source($conn, SQL_FETCH_NEXT);
}

odbc_close($conn);

// Alle gesammelten DSNs ausgeben
foreach ($dsnListe as $eintrag) {
    printf("DSN: %-20s Beschreibung: %s\n", $eintrag['name'], $eintrag['description']);
}
DSN: MeineDSN Beschreibung: Meine Produktionsdatenbank DSN: TestDSN Beschreibung: Testdatenbank

// Wichtig · Fallstricke

Plattformabhängigkeit: Die verfügbaren DSNs hängen vom Betriebssystem und dem installierten ODBC-Treibermanager ab (z. B. unixODBC unter Linux, Windows ODBC-Datquellenverwaltung). Das Ergebnis kann daher auf verschiedenen Systemen stark variieren.

Berechtigungen: Systemweite DSNs (System-DSNs) sind möglicherweise nicht für alle Benutzer sichtbar, insbesondere unter Windows, wo Benutzer-DSNs und System-DSNs getrennt verwaltet werden. Stellen Sie sicher, dass der ausführende PHP-Prozess die nötigen Rechte besitzt.

Iteration: Es ist wichtig, die Schleife korrekt mit SQL_FETCH_FIRST zu beginnen, da andernfalls die Liste von einem undefinierten Zustand aus durchlaufen wird. Ein versehentlicher erneuter Aufruf mit SQL_FETCH_FIRST setzt die Iteration wieder auf den Anfang zurück.