Signatur
Beschreibung
ibase_free_result() gibt den Speicher frei, der für eine mit ibase_query() oder ibase_execute() erzeugte Ergebnismenge reserviert wurde. Nach dem Aufruf ist das übergebene Ressource-Handle ungültig und darf nicht mehr verwendet werden.
Die Funktion ist besonders dann wichtig, wenn in einer Schleife viele Abfragen ausgeführt werden oder wenn große Ergebnismengen verarbeitet werden, da PHP Datenbankressourcen nicht automatisch zum frühestmöglichen Zeitpunkt freigibt. Durch explizites Freigeben kann der Speicherverbrauch des Skripts deutlich reduziert werden.
Wird die Funktion nicht aufgerufen, gibt PHP die Ressource erst am Ende des Skripts frei. Bei lang laufenden Skripten oder Serverprozessen (z. B. PHP-FPM) kann dies zu erhöhtem Speicherverbrauch führen. Es empfiehlt sich daher, Ergebnis-Handles immer explizit nach der Verarbeitung freizugeben.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $result_identifier Pflicht | resource | Eine gültige InterBase/Firebird-Ergebnisressource, die zuvor durch ibase_query() oder ibase_execute() erzeugt wurde. |
Rückgabewert
true zurück, wenn die Ergebnismenge erfolgreich freigegeben wurde, andernfalls false.Beispiele
Einfache Abfrage und anschließende Freigabe
<?php
$dbh = ibase_connect('localhost:/var/lib/firebird/mydb.fdb', 'sysdba', 'masterkey');
$result = ibase_query($dbh, 'SELECT * FROM EMPLOYEES');
while ($row = ibase_fetch_object($result)) {
echo $row->NAME . ' - ' . $row->DEPARTMENT . PHP_EOL;
}
// Ergebnismenge explizit freigeben
ibase_free_result($result);
ibase_close($dbh);
?>
Mehrere Abfragen in einer Schleife mit Freigabe
<?php
$dbh = ibase_connect('localhost:/var/lib/firebird/mydb.fdb', 'sysdba', 'masterkey');
$departments = ['HR', 'IT', 'SALES'];
foreach ($departments as $dept) {
$result = ibase_query(
$dbh,
"SELECT NAME FROM EMPLOYEES WHERE DEPARTMENT = '" . $dept . "'"
);
echo "Abteilung: $dept" . PHP_EOL;
while ($row = ibase_fetch_assoc($result)) {
echo ' - ' . $row['NAME'] . PHP_EOL;
}
// Wichtig: Ergebnis nach jeder Iteration freigeben
ibase_free_result($result);
}
ibase_close($dbh);
?>
// Wichtig · Fallstricke
Deprecation: Die gesamte ibase_*-Erweiterung (Interbase) wurde in PHP 8.0.0 entfernt. Ab PHP 7.4 wurde sie als veraltet markiert. Für aktuelle Projekte mit Firebird-Datenbanken sollte die Firebird/InterBase-Erweiterung (fbird_*) oder PDO mit dem Firebird-Treiber verwendet werden.
Das Übergeben eines bereits freigegebenen oder ungültigen Ressource-Handles führt zu einem PHP-Fehler. Es empfiehlt sich daher, nach dem Freigeben die Variable auf null zu setzen.