Start · Sprachen · PHP · Referenz · ocifreecursor

ocifreecursor

Funktion

Alias von <code>oci_free_statement()</code> — gibt alle Ressourcen eines Oracle-Statement-Handles frei.

seit PHP 4.0.0 Kategorie: db

Signatur

ocifreecursor(resource $statement): bool

Beschreibung

ocifreecursor() ist ein veralteter Alias der Funktion oci_free_statement(). Sie gibt alle mit einem Oracle-Statement (Cursor) verbundenen Ressourcen frei, die durch Funktionen wie ociparse() oder ocinewcursor() erzeugt wurden.

In modernem PHP-Code sollte stets oci_free_statement() verwendet werden, da die alte oci*-Schreibweise als veraltet gilt und in zukünftigen PHP-Versionen entfernt werden kann. Die Funktion ist seit PHP 8.0 als deprecated markiert und wurde in PHP 8.4 entfernt.

Das explizite Freigeben von Statement-Ressourcen ist besonders bei langen Skripten oder Schleifen mit vielen Datenbankabfragen wichtig, um Speicherlecks zu vermeiden und Oracle-seitige Cursor-Limits nicht zu überschreiten.

Parameter

Name Typ Default Beschreibung
$statement Pflicht resource Ein gültiges OCI-Statement-Handle, das zuvor mit ociparse(), ociexecute() oder ocinewcursor() erzeugt wurde.

Rückgabewert

Typ
bool
Beschreibung
Gibt true bei Erfolg zurück, false bei einem Fehler (z. B. wenn das übergebene Handle ungültig ist).

Beispiele

Statement-Ressource nach einer Abfrage freigeben

<?php
// Veralteter Stil – nur zur Demonstration, bevorzuge oci_free_statement()
$conn = ocilogon('benutzer', 'passwort', 'datenbank');

if ($conn) {
    $stmt = ociparse($conn, 'SELECT mitarbeiter_id, name FROM mitarbeiter WHERE abteilung_id = :abt');
    ocibindbyname($stmt, ':abt', $abteilung_id);
    $abteilung_id = 10;

    ociexecute($stmt);

    while ($row = ocifetcharray($stmt, OCI_ASSOC)) {
        echo $row['MITARBEITER_ID'] . ': ' . $row['NAME'] . PHP_EOL;
    }

    // Ressource explizit freigeben
    ocifreecursor($stmt);
    ocilogoff($conn);
}
?>

Empfohlene moderne Alternative mit oci_free_statement()

<?php
// Moderne Schreibweise – bevorzugt ab PHP 5.x
$conn = oci_connect('benutzer', 'passwort', 'datenbank');

if ($conn) {
    $stmt = oci_parse($conn, 'SELECT COUNT(*) AS anzahl FROM bestellungen');
    oci_execute($stmt);

    if ($row = oci_fetch_assoc($stmt)) {
        echo 'Anzahl Bestellungen: ' . $row['ANZAHL'] . PHP_EOL;
    }

    // Ressource mit der modernen Funktion freigeben
    oci_free_statement($stmt);
    oci_close($conn);
}
?>
Anzahl Bestellungen: 42

// Wichtig · Fallstricke

Deprecation-Hinweis: ocifreecursor() ist ein Alias der alten OCI1-API und sollte in neuem Code nicht mehr verwendet werden. Ab PHP 8.0 wird bei der Verwendung eine Deprecation Notice ausgelöst. In PHP 8.4 wurde die Funktion vollständig entfernt. Verwende stattdessen oci_free_statement().

Cursor-Limits: Oracle-Datenbankserver haben eine konfigurierbare Obergrenze für offene Cursor (OPEN_CURSORS). Wenn Statement-Handles nicht ordnungsgemäß freigegeben werden, kann diese Grenze überschritten werden, was zu ORA-01000: maximum open cursors exceeded-Fehlern führt. Daher ist das explizite Freigeben besonders in Schleifen wichtig.