Signatur
Beschreibung
fbird_free_query() gibt eine zuvor mit ibase_prepare() bzw. fbird_prepare() vorbereitete Abfrage frei. Dadurch werden sowohl serverseitige als auch clientseitige Ressourcen freigegeben, die mit diesem Prepared Statement verbunden sind.
Die Funktion ist das Gegenstück zu fbird_prepare(): Nachdem ein Prepared Statement nicht mehr benötigt wird, sollte es immer explizit mit fbird_free_query() freigegeben werden, um Speicherlecks und unnötige Serverlast zu vermeiden – insbesondere in Schleifen oder bei häufig wiederholten Vorbereitungen.
In PHP 8.0 wurden die ibase_*-Funktionen aus dem PHP-Kern entfernt und stehen nur noch über die PECL-Erweiterung ibase zur Verfügung. fbird_free_query() ist ein Alias für ibase_free_query() und verhält sich identisch.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $query Pflicht | resource | Das Ressourcen-Handle einer vorbereiteten Abfrage, wie es von fbird_prepare() bzw. ibase_prepare() zurückgegeben wurde. |
Rückgabewert
true bei Erfolg zurück, false im Fehlerfall (z. B. wenn das übergebene Handle ungültig oder bereits freigegeben ist).Beispiele
Vorbereitete Abfrage ausführen und danach freigeben
<?php
$dbh = ibase_connect('localhost:/var/lib/firebird/mydb.fdb', 'sysdba', 'masterkey');
// Abfrage vorbereiten
$query = fbird_prepare($dbh, 'SELECT id, name FROM users WHERE active = ?');
// Abfrage mehrfach mit verschiedenen Parametern ausführen
$result1 = fbird_execute($query, 1);
while ($row = fbird_fetch_assoc($result1)) {
echo $row['id'] . ': ' . $row['name'] . PHP_EOL;
}
fbird_free_result($result1);
// Prepared Statement freigeben, wenn nicht mehr benötigt
fbird_free_query($query);
ibase_close($dbh);
?>
Mehrere Prepared Statements in einer Schleife freigeben
<?php
$dbh = ibase_connect('localhost:/var/lib/firebird/mydb.fdb', 'sysdba', 'masterkey');
$statements = [
fbird_prepare($dbh, 'INSERT INTO log (msg) VALUES (?)'),
fbird_prepare($dbh, 'UPDATE stats SET hits = hits + 1 WHERE page = ?'),
];
// Statements verwenden ...
fbird_execute($statements[0], 'Benutzer hat sich angemeldet');
fbird_execute($statements[1], 'home');
// Alle Statements nach Gebrauch freigeben
foreach ($statements as $stmt) {
if (!fbird_free_query($stmt)) {
error_log('Fehler beim Freigeben eines Prepared Statements.');
}
}
ibase_close($dbh);
?>
// Wichtig · Fallstricke
Deprecation / Verfügbarkeit: Die ibase_*- und fbird_*-Funktionen wurden in PHP 7.4 als veraltet markiert und in PHP 8.0 aus dem Kern entfernt. Ab PHP 8.0 sind sie nur noch über die PECL-Erweiterung ibase verfügbar. Für neue Projekte sollte eine PDO-basierte Firebird-Anbindung (PDO_FIREBIRD) in Betracht gezogen werden.
Wird fbird_free_query() nicht aufgerufen, gibt PHP die Ressource am Ende des Skripts automatisch frei. Bei lang laufenden Skripten oder vielen Prepared Statements empfiehlt sich jedoch ein expliziter Aufruf, um Ressourcen zeitnah freizugeben.