Signatur
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
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);
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']);
}
// 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.