Start · Sprachen · PHP · Referenz · odbc_connect

odbc_connect

Funktion

Öffnet eine Verbindung zu einer ODBC-Datenquelle und gibt eine Verbindungsressource zurück.

seit PHP 4.0.0 Kategorie: db

Signatur

odbc_connect(string $dsn, string $user, string $password, int $cursor_type = SQL_CUR_USE_DRIVER): resource|false

Beschreibung

odbc_connect() stellt eine Verbindung zu einer ODBC-Datenquelle (Data Source Name, kurz DSN) her. ODBC (Open Database Connectivity) ist eine standardisierte Schnittstelle, über die PHP mit verschiedensten relationalen Datenbanken kommunizieren kann – darunter Microsoft SQL Server, IBM DB2, Oracle, MySQL oder jede andere ODBC-fähige Datenbank.

Die Funktion gibt bei Erfolg eine Verbindungsressource zurück, die als Handle für alle weiteren ODBC-Funktionen wie odbc_exec(), odbc_prepare() oder odbc_close() verwendet wird. Im Fehlerfall wird false zurückgegeben. Verbindungen, die mit odbc_connect() erstellt werden, sind nicht persistent – sie werden am Ende des Scripts automatisch geschlossen.

Für persistente Verbindungen, die über mehrere Requests hinweg wiederverwendet werden, steht odbc_pconnect() zur Verfügung. Der optionale Parameter $cursor_type ermöglicht die Steuerung des Cursor-Verhaltens bei Datenbanken, die verschiedene Cursor-Typen unterstützen.

Der DSN kann entweder als systemweiter DSN-Name (der im ODBC-Treibermanager konfiguriert ist), als vollständiger Connection-String oder als Datei-DSN übergeben werden.

Parameter

Name Typ Default Beschreibung
$dsn Pflicht string Der Data Source Name (DSN) der ODBC-Datenquelle. Kann ein im System registrierter DSN-Name, ein vollständiger ODBC-Connection-String (z. B. Driver={SQL Server};Server=localhost;Database=mydb;) oder ein Dateipfad zu einem Datei-DSN sein.
$user Pflicht string Der Benutzername für die Authentifizierung an der Datenquelle.
$password Pflicht string Das Passwort des Benutzers für die Authentifizierung.
$cursor_type int SQL_CUR_USE_DRIVER Gibt den Cursor-Typ an, der für diese Verbindung verwendet werden soll. Mögliche Werte sind SQL_CUR_USE_IF_NEEDED, SQL_CUR_USE_ODBC, SQL_CUR_USE_DRIVER und SQL_CUR_DEFAULT. Dieser Parameter ist meist nur bei speziellen Kompatibilitätsproblemen mit bestimmten ODBC-Treibern relevant.

Rückgabewert

Typ
resource|false
Beschreibung
Gibt bei erfolgreicher Verbindung eine ODBC-Verbindungsressource zurück, die als Handle für alle weiteren ODBC-Operationen dient. Im Fehlerfall (z. B. ungültiger DSN, falsche Zugangsdaten) wird false zurückgegeben.

Beispiele

Einfache Verbindung über DSN-Namen

<?php
$dsn      = 'MeineDatenbank';  // Im ODBC-Treibermanager registrierter DSN
$user     = 'db_user';
$password = 'geheimes_passwort';

$conn = odbc_connect($dsn, $user, $password);

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

echo "Verbindung erfolgreich hergestellt.\n";

// Einfache Abfrage ausführen
$result = odbc_exec($conn, 'SELECT id, name FROM kunden LIMIT 5');
while ($row = odbc_fetch_array($result)) {
    echo $row['id'] . ' - ' . $row['name'] . "\n";
}

odbc_close($conn);
Verbindung erfolgreich hergestellt. 1 - Max Mustermann 2 - Erika Muster ...

Verbindung mit vollständigem Connection-String (ohne DSN-Eintrag)

<?php
// Connection-String direkt als DSN übergeben – kein systemweiter DSN-Eintrag nötig
$connectionString = 'Driver={ODBC Driver 17 for SQL Server};'
                  . 'Server=192.168.1.10;'
                  . 'Database=Verkauf;'
                  . 'TrustServerCertificate=yes;';

$user     = 'sa';
$password = 'SicheresPasswort123!';

$conn = odbc_connect($connectionString, $user, $password);

if ($conn === false) {
    $fehler = odbc_errormsg();
    error_log('ODBC-Fehler: ' . $fehler);
    die('Datenbankverbindung konnte nicht hergestellt werden.');
}

// Prepared Statement verwenden (schützt vor SQL-Injection)
$stmt = odbc_prepare($conn, 'SELECT * FROM produkte WHERE kategorie_id = ?');
odbc_execute($stmt, [3]);

while ($row = odbc_fetch_array($stmt)) {
    echo htmlspecialchars($row['bezeichnung']) . "\n";
}

odbc_close($conn);
Produkt A Produkt B Produkt C ...

// Wichtig · Fallstricke

Sicherheitshinweis: Benutzername und Passwort sollten niemals fest im Quellcode stehen. Verwende stattdessen Umgebungsvariablen oder eine externe Konfigurationsdatei, die außerhalb des Web-Roots liegt und nicht öffentlich zugänglich ist.

SQL-Injection: Baue SQL-Abfragen niemals durch direkte String-Konkatenation mit Benutzereingaben zusammen. Verwende stattdessen odbc_prepare() in Kombination mit odbc_execute(), um parametrisierte Abfragen zu nutzen.

Ressourcenverwaltung: Verbindungen sollten nach Gebrauch explizit mit odbc_close() geschlossen werden, auch wenn PHP nicht-persistente Verbindungen am Script-Ende automatisch schließt. Bei persistenten Verbindungen (odbc_pconnect()) hat odbc_close() keine Wirkung.

Fehlerbehandlung: Prüfe den Rückgabewert stets mit === false und werte im Fehlerfall odbc_error() und odbc_errormsg() aus, um die Fehlerursache zu diagnostizieren.