Start · Sprachen · PHP · Referenz · fbird_free_query

fbird_free_query

Funktion

Gibt eine vorbereitete Firebird/InterBase-Abfrage frei und gibt die zugehörigen Serverressourcen wieder frei.

seit PHP 5.0.0 Kategorie: db

Signatur

fbird_free_query(resource $query): bool

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

Typ
bool
Beschreibung
Gibt 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.