Signatur
Beschreibung
ocifreestatement() ist ein veralteter Alias der Funktion oci_free_statement() und wird seit PHP 5 nicht mehr empfohlen. Die Funktion gibt alle Ressourcen frei, die dem übergebenen OCI8-Statement-Handle zugeordnet sind, und schließt damit die mit oci_parse() erzeugte Anweisung.
Sobald ein SQL-Statement ausgeführt und die Ergebnisse verarbeitet wurden, sollte die zugehörige Ressource explizit freigegeben werden, um den Speicherverbrauch zu reduzieren und Datenbankverbindungen nicht unnötig zu belasten. Intern ruft ocifreestatement() lediglich oci_free_statement() auf.
In modernen PHP-Projekten sollte stets oci_free_statement() verwendet werden, da der Alias ocifreestatement() in zukünftigen PHP-Versionen entfernt werden könnte. Das explizite Freigeben von Statements ist besonders in Schleifen oder bei der Verarbeitung vieler Abfragen wichtig, um Ressourcenlecks zu vermeiden.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $statement Pflicht | resource | Ein gültiges OCI8-Statement-Handle, wie es von oci_parse() oder oci_new_cursor() zurückgegeben wird. |
Rückgabewert
true zurück, wenn die Ressource erfolgreich freigegeben wurde, andernfalls false.Beispiele
Einfaches Ausführen und Freigeben eines OCI8-Statements
<?php
$conn = oci_connect('benutzer', 'passwort', 'localhost/XE');
if (!$conn) {
$e = oci_error();
trigger_error(htmlspecialchars($e['message']), E_USER_ERROR);
}
$sql = 'SELECT vorname, nachname FROM kunden WHERE id = :id';
$stmt = oci_parse($conn, $sql);
$id = 42;
oci_bind_by_name($stmt, ':id', $id);
oci_execute($stmt);
while ($row = oci_fetch_assoc($stmt)) {
echo $row['VORNAME'] . ' ' . $row['NACHNAME'] . PHP_EOL;
}
// Veralteter Alias — besser oci_free_statement() verwenden
ocifreestatement($stmt);
oci_close($conn);
?>
Mehrere Statements in einer Schleife freigeben
<?php
$conn = oci_connect('benutzer', 'passwort', 'localhost/XE');
$ids = [1, 2, 3];
foreach ($ids as $id) {
$stmt = oci_parse($conn, 'SELECT name FROM produkte WHERE id = :id');
oci_bind_by_name($stmt, ':id', $id);
oci_execute($stmt);
while ($row = oci_fetch_assoc($stmt)) {
echo 'Produkt: ' . $row['NAME'] . PHP_EOL;
}
// Statement nach jedem Schleifendurchlauf freigeben
ocifreestatement($stmt);
}
oci_close($conn);
?>
// Wichtig · Fallstricke
Deprecation-Hinweis: ocifreestatement() ist ein veralteter Alias und sollte in neuem Code nicht mehr verwendet werden. Nutzen Sie stattdessen oci_free_statement(). Der Alias könnte in einer zukünftigen PHP-Version ohne Vorwarnung entfernt werden.
Das explizite Freigeben von Statement-Ressourcen ist besonders wichtig, wenn viele Abfragen in einer Schleife ausgeführt werden, da PHP OCI8-Ressourcen nicht automatisch nach jedem Schleifendurchlauf freigibt. Unterlassenes Freigeben kann zu erhöhtem Speicherverbrauch und im schlimmsten Fall zu erschöpften Datenbankverbindungen führen.