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