Signatur
Beschreibung
odbc_close_all() schließt sämtliche aktiven ODBC-Datenbankverbindungen, die im aktuellen PHP-Prozess geöffnet wurden – sowohl persistente als auch nicht-persistente Verbindungen. Die Funktion erwartet keine Parameter und gibt keinen Wert zurück.
Sie eignet sich besonders am Ende eines Skripts, wenn mehrere ODBC-Verbindungen gleichzeitig geöffnet wurden und alle auf einmal freigegeben werden sollen, ohne jede Verbindung einzeln mit odbc_close() zu schließen. Das spart Code und verhindert, dass Verbindungsressourcen versehentlich offen bleiben.
Zu beachten ist, dass persistente Verbindungen (geöffnet mit odbc_pconnect()) normalerweise nicht durch odbc_close() geschlossen werden können – odbc_close_all() schließt jedoch auch diese. Nach dem Aufruf dieser Funktion sind alle Verbindungs-Handles ungültig und dürfen nicht mehr verwendet werden.
In modernen Anwendungen wird empfohlen, Verbindungen explizit zu verwalten und gezielt zu schließen. odbc_close_all() kann aber als Sicherheitsnetz in Fehlerbehandlungsroutinen oder am Skriptende sinnvoll eingesetzt werden.
Rückgabewert
Beispiele
Mehrere Verbindungen öffnen und alle auf einmal schließen
<?php
// Zwei ODBC-Verbindungen öffnen
$conn1 = odbc_connect('DSN1', 'benutzer1', 'passwort1');
$conn2 = odbc_connect('DSN2', 'benutzer2', 'passwort2');
if ($conn1 && $conn2) {
// Abfragen durchführen
$result1 = odbc_exec($conn1, 'SELECT * FROM kunden');
$result2 = odbc_exec($conn2, 'SELECT * FROM produkte');
// Ergebnisse verarbeiten ...
odbc_free_result($result1);
odbc_free_result($result2);
}
// Alle offenen Verbindungen auf einmal schließen
odbc_close_all();
echo "Alle ODBC-Verbindungen wurden geschlossen.";
?>
Verwendung in einer Fehlerbehandlungsroutine
<?php
function aufraeuemen(): void {
// Sicherstellen, dass alle Verbindungen geschlossen werden
odbc_close_all();
echo "Aufräumen abgeschlossen – alle ODBC-Verbindungen geschlossen.\n";
}
$conn = odbc_connect('MeinDSN', 'user', 'geheim');
if (!$conn) {
die('Verbindung fehlgeschlagen.');
}
try {
$result = odbc_exec($conn, 'SELECT COUNT(*) FROM bestellungen');
if (!$result) {
throw new RuntimeException('Abfrage fehlgeschlagen: ' . odbc_errormsg());
}
while (odbc_fetch_row($result)) {
echo 'Anzahl Bestellungen: ' . odbc_result($result, 1) . "\n";
}
odbc_free_result($result);
} catch (RuntimeException $e) {
echo 'Fehler: ' . $e->getMessage() . "\n";
} finally {
aufraeuemen();
}
?>
// Wichtig · Fallstricke
Persistente Verbindungen: Im Gegensatz zu odbc_close(), welches persistente Verbindungen (odbc_pconnect()) nicht schließt, beendet odbc_close_all() auch persistente Verbindungen. Dies kann in einer Umgebung mit Connection-Pooling unerwünschte Auswirkungen haben, da persistente Verbindungen wiederverwendet werden sollen.
Ungültige Handles: Nach dem Aufruf von odbc_close_all() sind alle zuvor geöffneten Verbindungs-Handles ungültig. Jede weitere Verwendung dieser Handles führt zu einem Fehler. Es empfiehlt sich, die Variablen nach dem Schließen auf null zu setzen.
PHP beendet Verbindungen automatisch: Am Ende eines Skripts schließt PHP nicht-persistente Verbindungen automatisch. odbc_close_all() ist dennoch sinnvoll, wenn Ressourcen früher im Skriptverlauf freigegeben werden sollen.