Start · Sprachen · PHP · Referenz · db2_free_stmt

db2_free_stmt

Funktion

Gibt alle Ressourcen frei, die einer DB2-Statement-Ressource zugeordnet sind.

seit PHP 5.1.0 Kategorie: db

Signatur

db2_free_stmt(resource $stmt): bool

Beschreibung

db2_free_stmt() gibt den Speicher und die Datenbankressourcen frei, die einer zuvor mit db2_prepare() oder db2_exec() erstellten Statement-Ressource zugeordnet sind. Nach dem Aufruf ist das Handle ungültig und darf nicht mehr verwendet werden.

In lang laufenden Anwendungen oder Skripten, die viele Abfragen in einer Schleife ausführen, ist es empfehlenswert, Statement-Ressourcen nach ihrer Verwendung explizit freizugeben, um den Speicherbedarf gering zu halten und Cursor-Limits auf dem Datenbankserver nicht zu überschreiten.

Für Verbindungen, die über Connection-Pooling wiederverwendet werden, ist das explizite Freigeben von Statements besonders wichtig, da offene Cursors die Verbindung blockieren können.

Parameter

Name Typ Default Beschreibung
$stmt Pflicht resource Eine gültige Statement-Ressource, die von db2_prepare() oder db2_exec() zurückgegeben wurde.

Rückgabewert

Typ
bool
Beschreibung
Gibt true zurück, wenn die Ressourcen erfolgreich freigegeben wurden, andernfalls false.

Beispiele

Statement nach Ausführung freigeben

<?php
$conn = db2_connect('SAMPLE', 'db2user', 'geheim');

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

    if ($stmt) {
        db2_execute($stmt, [1]);

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

        // Ressourcen explizit freigeben
        db2_free_stmt($stmt);
    }

    db2_close($conn);
}
1: Max Mustermann 2: Erika Muster ...

Mehrere Statements in einer Schleife freigeben

<?php
$conn = db2_connect('SAMPLE', 'db2user', 'geheim');

if ($conn) {
    $ids = [101, 102, 103, 104];

    foreach ($ids as $id) {
        $stmt = db2_prepare($conn, 'SELECT * FROM bestellungen WHERE kunden_id = ?');

        if ($stmt) {
            db2_execute($stmt, [$id]);

            while ($row = db2_fetch_assoc($stmt)) {
                echo 'Bestellung ' . $row['bestell_nr'] . PHP_EOL;
            }

            // Innerhalb der Schleife freigeben, um Cursor-Limit nicht zu überschreiten
            db2_free_stmt($stmt);
        }
    }

    db2_close($conn);
}
Bestellung 55001 Bestellung 55002 ...

// Wichtig · Fallstricke

Cursor-Limits: DB2-Datenbankserver haben eine maximale Anzahl gleichzeitig offener Cursors pro Verbindung. Werden Statements in Schleifen erstellt, ohne sie freizugeben, kann dieses Limit schnell erreicht werden, was zu Fehlern führt.

Nach dem Freigeben: Nach dem Aufruf von db2_free_stmt() darf die Statement-Ressource nicht mehr für db2_execute(), db2_fetch_assoc() oder ähnliche Funktionen verwendet werden. Jeder weitere Aufruf auf dem freigegebenen Handle führt zu einem Fehler.

Automatische Freigabe: Ressourcen werden beim Skript-Ende automatisch freigegeben. In lang laufenden Prozessen (z. B. CLI-Daemons) sollte db2_free_stmt() jedoch stets explizit aufgerufen werden.