Start · Sprachen · PHP · Referenz · ibase_free_query

ibase_free_query

Funktion

Gibt den Speicher einer mit <code>ibase_prepare()</code> vorbereiteten Abfrage wieder frei.

seit PHP 5.0.0 Kategorie: db

Signatur

ibase_free_query(resource $query): bool

Beschreibung

ibase_free_query() gibt die Ressource frei, die durch ibase_prepare() für eine vorbereitete SQL-Abfrage auf einem InterBase/Firebird-Datenbankserver angelegt wurde. Sobald eine vorbereitete Abfrage nicht mehr benötigt wird, sollte diese Funktion aufgerufen werden, um den auf dem Server sowie in PHP belegten Speicher freizugeben.

Vorbereitete Abfragen (Prepared Statements) werden in der Regel für SQL-Anweisungen verwendet, die wiederholt mit unterschiedlichen Parametern ausgeführt werden sollen (z. B. in Schleifen). Nach dem letzten Ausführen der Abfrage ist es gute Praxis, die Ressource mit ibase_free_query() zu bereinigen, um Ressourcenlecks zu vermeiden.

Im Gegensatz zu ibase_free_result(), das das Ergebnis einer bereits ausgeführten Abfrage freigibt, befreit ibase_free_query() das vorbereitete Statement selbst. Beide Funktionen können unabhängig voneinander benötigt werden, wenn eine Abfrage mehrfach ausgeführt wurde.

Hinweis: Die ibase_*-Funktionen wurden mit PHP 8.0 aus dem PHP-Core entfernt und stehen nur noch über die PECL-Erweiterung ibase bzw. das Firebird-Modul zur Verfügung.

Parameter

Name Typ Default Beschreibung
$query Pflicht resource Eine vorbereitete Abfrage-Ressource, wie sie von ibase_prepare() zurückgegeben wird.

Rückgabewert

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

Beispiele

Vorbereitete Abfrage ausführen und anschließend freigeben

<?php
$dbh = ibase_connect('localhost:employee.fdb', 'sysdba', 'masterkey');

// Abfrage vorbereiten
$stmt = ibase_prepare($dbh, 'INSERT INTO orders (customer_id, amount) VALUES (?, ?)');

$orders = [
    [1, 99.90],
    [2, 149.50],
    [3, 49.00],
];

foreach ($orders as [$customerId, $amount]) {
    ibase_execute($stmt, $customerId, $amount);
}

// Speicher der vorbereiteten Abfrage freigeben
ibase_free_query($stmt);

ibase_commit($dbh);
ibase_close($dbh);

echo "Alle Bestellungen eingefügt und Speicher freigegeben.";
?>
Alle Bestellungen eingefügt und Speicher freigegeben.

Vorbereiten, Ausführen und Ergebnis plus Abfrage freigeben

<?php
$dbh = ibase_connect('localhost:employee.fdb', 'sysdba', 'masterkey');

$stmt = ibase_prepare($dbh, 'SELECT * FROM customers WHERE country = ?');

$result = ibase_execute($stmt, 'DE');

while ($row = ibase_fetch_assoc($result)) {
    echo $row['name'] . PHP_EOL;
}

// Zuerst das Ergebnis, dann die vorbereitete Abfrage freigeben
ibase_free_result($result);
ibase_free_query($stmt);

ibase_close($dbh);
?>

// Wichtig · Fallstricke

Deprecation / Entfernung: Die gesamte ibase_*-Funktionsfamilie wurde in PHP 7.4 als veraltet markiert und in PHP 8.0 aus dem PHP-Core entfernt. Für neue Projekte sollte stattdessen die Firebird/InterBase-PECL-Erweiterung oder PDO mit dem Firebird-Treiber (PDO_FIREBIRD) verwendet werden.

Wird ibase_free_query() nicht aufgerufen, werden vorbereitete Statements erst beim Skriptende oder beim Schließen der Verbindung freigegeben. In lang laufenden Skripten oder Schleifen kann das unterlassene Freigeben zu erhöhtem Speicherverbrauch führen.