Start · Sprachen · PHP · Referenz · db2_free_result

db2_free_result

Funktion

Gibt die Speicherressourcen frei, die einem Ergebnis-Statement einer IBM Db2-Abfrage zugeordnet sind.

seit PHP 5.1.0 Kategorie: db

Signatur

db2_free_result(resource $stmt): bool

Beschreibung

db2_free_result() gibt alle Ressourcen frei, die intern für das durch $stmt referenzierte Ergebnis-Handle eines IBM Db2-Statements belegt wurden. Dies betrifft insbesondere den Speicher für Ergebnismengen, die bei SELECT-Abfragen anfallen können.

Die Funktion ist sinnvoll, wenn innerhalb eines Skripts viele oder große Abfragen ausgeführt werden und der belegte Speicher für Ergebnismengen frühzeitig freigegeben werden soll, ohne die gesamte Statement-Ressource zu zerstören. Anders als db2_free_stmt() gibt sie nicht das Statement selbst, sondern nur das zugehörige Ergebnis frei — das Statement kann anschließend erneut ausgeführt werden.

In lang laufenden Skripten oder Schleifen mit vielen Datenbankabfragen kann das explizite Aufrufen von db2_free_result() helfen, den Speicherverbrauch zu reduzieren und Ressourcenengpässe zu vermeiden, da PHP den Speicher nicht immer sofort automatisch zurückgibt.

Nach dem Aufruf sind alle bisher abgerufenen Zeilen des Ergebnisses nicht mehr verfügbar. Eine erneute Ausführung des Statements mit db2_execute() erzeugt ein neues Ergebnis.

Parameter

Name Typ Default Beschreibung
$stmt Pflicht resource Eine gültige Statement-Ressource, die durch db2_exec(), db2_execute() oder db2_prepare() erzeugt wurde und ein aktives Ergebnis enthält.

Rückgabewert

Typ
bool
Beschreibung
Gibt true zurück, wenn die Ressourcen erfolgreich freigegeben wurden, andernfalls false (z. B. wenn das übergebene Handle ungültig ist).

Beispiele

Ergebnisressourcen nach einer SELECT-Abfrage freigeben

<?php
$conn = db2_connect('SAMPLE', 'db2inst1', 'geheimesPasswort');

if ($conn) {
    $sql = 'SELECT id, name FROM kunden WHERE aktiv = 1';
    $stmt = db2_exec($conn, $sql);

    if ($stmt) {
        while ($row = db2_fetch_assoc($stmt)) {
            echo $row['id'] . ': ' . $row['name'] . PHP_EOL;
        }

        // Ergebnis-Ressourcen freigeben, Statement bleibt erhalten
        $result = db2_free_result($stmt);
        if ($result) {
            echo 'Ergebnisressourcen erfolgreich freigegeben.' . PHP_EOL;
        }
    }

    db2_close($conn);
}
1: Max Mustermann 2: Erika Musterfrau Ergebnisressourcen erfolgreich freigegeben.

Mehrere Abfragen in einer Schleife mit expliziter Ressourcenfreigabe

<?php
$conn = db2_connect('SAMPLE', 'db2inst1', 'geheimesPasswort');

if ($conn) {
    $tabellen = ['bestellungen', 'positionen', 'artikel'];

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

        if ($stmt) {
            $row = db2_fetch_assoc($stmt);
            echo $tabelle . ': ' . $row['ANZAHL'] . ' Einträge' . PHP_EOL;

            // Speicher nach jeder Abfrage explizit freigeben
            db2_free_result($stmt);
        }
    }

    db2_close($conn);
}
bestellungen: 4821 Einträge positionen: 19043 Einträge artikel: 532 Einträge

// Wichtig · Fallstricke

Unterschied zu db2_free_stmt(): Während db2_free_result() nur die Ergebnismenge freigibt und das Statement weiterhin nutzbar bleibt, gibt db2_free_stmt() sowohl Ergebnis als auch Statement vollständig frei. Soll das Statement anschließend erneut ausgeführt werden, ist db2_free_result() die richtige Wahl.

Die Funktion steht nur zur Verfügung, wenn die ibm_db2-Erweiterung installiert und aktiviert ist. Diese Erweiterung ist nicht Teil der PHP-Standardinstallation und muss separat eingebunden werden.

In modernen PHP-Umgebungen mit automatischem Garbage Collector kann der Unterschied marginal sein, dennoch empfiehlt sich die explizite Freigabe bei speicherintensiven Abfragen oder langen Skriptlaufzeiten.