Start · Sprachen · PHP · Referenz · odbc_free_result

odbc_free_result

Funktion

Gibt den Speicher und alle mit einem ODBC-Ergebnissatz verbundenen Ressourcen frei.

seit PHP 4.0.0 Kategorie: db

Signatur

odbc_free_result(resource $result): bool

Beschreibung

odbc_free_result gibt die mit einem ODBC-Ergebnissatz verbundenen Ressourcen explizit frei. Dies ist nützlich, wenn innerhalb eines Skripts viele Abfragen ausgeführt werden und der Speicherverbrauch kontrolliert werden soll, ohne das Ende des Skripts abzuwarten.

Normalerweise werden alle Ressourcen automatisch am Ende eines PHP-Skripts freigegeben. Der explizite Aufruf von odbc_free_result empfiehlt sich jedoch, wenn ein Skript lange läuft oder große Ergebnismengen verarbeitet werden und der Speicher zeitnah wieder verfügbar sein soll.

Nach dem Aufruf dieser Funktion ist das übergebene $result-Handle ungültig und darf nicht mehr verwendet werden. Der Datenbankverbindungs-Handle selbst bleibt davon unberührt und kann weiterhin für neue Abfragen genutzt werden.

Parameter

Name Typ Default Beschreibung
$result Pflicht resource Das ODBC-Ergebnissatz-Handle, das zuvor durch einen Aufruf wie odbc_exec oder odbc_execute erzeugt wurde.

Rückgabewert

Typ
bool
Beschreibung
Gibt true bei Erfolg zurück. Gibt false zurück, wenn das übergebene Handle ungültig ist oder die Ressourcen nicht freigegeben werden konnten.

Beispiele

Ergebnis nach Verarbeitung explizit freigeben

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

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

$result = odbc_exec($conn, 'SELECT id, name FROM kunden');

if ($result) {
    while ($row = odbc_fetch_array($result)) {
        echo $row['id'] . ': ' . $row['name'] . PHP_EOL;
    }
    // Ergebnissatz nach Verarbeitung freigeben
    odbc_free_result($result);
}

odbc_close($conn);
1: Max Mustermann 2: Erika Musterfrau ...

Mehrere Abfragen mit Speicherfreigabe zwischen den Abfragen

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

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

$tabellen = ['bestellungen', 'produkte', 'kunden'];

foreach ($tabellen as $tabelle) {
    $sql = 'SELECT COUNT(*) AS anzahl FROM ' . $tabelle;
    $result = odbc_exec($conn, $sql);

    if ($result) {
        $row = odbc_fetch_array($result);
        echo "Tabelle '$tabelle': " . $row['anzahl'] . " Einträge" . PHP_EOL;

        // Ressource sofort freigeben, um Speicher für die nächste Abfrage zu sparen
        odbc_free_result($result);
    }
}

odbc_close($conn);
Tabelle 'bestellungen': 1042 Einträge Tabelle 'produkte': 358 Einträge Tabelle 'kunden': 217 Einträge

// Wichtig · Fallstricke

Achtung: Nach dem Aufruf von odbc_free_result darf das Handle $result nicht mehr verwendet werden, da es ungültig ist. Jeder weitere Zugriff darauf führt zu einem PHP-Fehler oder unerwartetem Verhalten.

In den meisten PHP-Skripten ist ein expliziter Aufruf nicht zwingend notwendig, da PHP die Ressourcen am Skriptende automatisch bereinigt. Bei lang laufenden Prozessen (z. B. CLI-Skripte, Daemon-Prozesse) oder bei der Verarbeitung sehr großer Datenmengen ist odbc_free_result jedoch ein wichtiges Werkzeug zur Vermeidung von Speicherproblemen.