Signatur
Beschreibung
ibase_execute() dient zur Ausführung einer vorbereiteten SQL-Abfrage gegen eine InterBase- oder Firebird-Datenbank. Die Abfrage muss zuvor mit ibase_prepare() kompiliert worden sein, was insbesondere dann vorteilhaft ist, wenn dieselbe Abfrage mehrfach mit unterschiedlichen Parametern ausgeführt werden soll, da der Datenbank-Server die Abfrage nur einmal analysieren und optimieren muss.
Platzhalter in der vorbereiteten Abfrage werden durch die optionalen $bind_args-Parameter ersetzt. Dies entspricht dem Prinzip von Prepared Statements und schützt vor SQL-Injection, sofern alle benutzerdefinierten Werte als gebundene Parameter übergeben werden, anstatt direkt in den SQL-String eingebettet zu werden.
Bei SELECT-Abfragen gibt die Funktion eine Ergebnis-Ressource zurück, die anschließend mit ibase_fetch_row(), ibase_fetch_assoc() oder ibase_fetch_object() ausgelesen werden kann. Bei anderen Abfragetypen wie INSERT, UPDATE oder DELETE wird bei Erfolg true zurückgegeben.
Hinweis: Die ibase_*-Funktionen (auch als fbird_* verfügbar) wurden mit PHP 8.0 aus dem PHP-Kern entfernt und stehen seitdem nur noch als eigenständige PECL-Extension zur Verfügung.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $query Pflicht | resource | Eine vorbereitete Abfrage-Ressource, wie sie von ibase_prepare() zurückgegeben wird. |
|
| $bind_args | mixed | Beliebig viele optionale Parameter, die als gebundene Werte in die vorbereitete Abfrage eingesetzt werden. Die Anzahl muss mit der Anzahl der ?-Platzhalter in der Abfrage übereinstimmen. |
Rückgabewert
SELECT-Abfragen wird eine Ergebnis-Ressource zurückgegeben, die mit den ibase_fetch_*-Funktionen ausgelesen werden kann. Bei anderen Abfragetypen (INSERT, UPDATE, DELETE etc.) wird bei Erfolg true zurückgegeben. Im Fehlerfall wird false zurückgegeben.Beispiele
Mehrfaches Einfügen mit einem vorbereiteten Statement
<?php
$dbh = ibase_connect('localhost:employee.fdb', 'sysdba', 'masterkey');
// Abfrage einmalig vorbereiten
$stmt = ibase_prepare($dbh, 'INSERT INTO USERS (ID, NAME, EMAIL) VALUES (?, ?, ?)');
$users = [
[1, 'Anna Müller', 'anna@example.com'],
[2, 'Ben Schmidt', 'ben@example.com'],
[3, 'Clara Fischer', 'clara@example.com'],
];
foreach ($users as $user) {
// Abfrage mit verschiedenen Parametern ausführen
$result = ibase_execute($stmt, $user[0], $user[1], $user[2]);
if ($result === false) {
echo 'Fehler beim Einfügen von: ' . $user[1] . PHP_EOL;
} else {
echo 'Eingefügt: ' . $user[1] . PHP_EOL;
}
}
ibase_free_query($stmt);
ibase_close($dbh);
?>
SELECT-Abfrage mit gebundenem Parameter
<?php
$dbh = ibase_connect('localhost:employee.fdb', 'sysdba', 'masterkey');
$stmt = ibase_prepare($dbh, 'SELECT ID, NAME, EMAIL FROM USERS WHERE ID = ?');
$userId = 2;
$result = ibase_execute($stmt, $userId);
if ($result !== false) {
while ($row = ibase_fetch_assoc($result)) {
echo 'ID: ' . $row['ID'] . PHP_EOL;
echo 'Name: ' . $row['NAME'] . PHP_EOL;
echo 'E-Mail: ' . $row['EMAIL'] . PHP_EOL;
}
ibase_free_result($result);
} else {
echo 'Abfrage fehlgeschlagen.';
}
ibase_free_query($stmt);
ibase_close($dbh);
?>
// Wichtig · Fallstricke
Deprecation / Entfernung: Die ibase_*-Funktionsfamilie wurde in PHP 7.4 als veraltet markiert und in PHP 8.0 vollständig aus dem PHP-Kern entfernt. Für PHP 8.x steht die Funktionalität nur noch über die PECL-Extension ibase (oder die identische fbird_*-Variante) bereit. Für neue Projekte wird die Verwendung von PDO mit dem Firebird-Treiber (PDO_FIREBIRD) empfohlen.
Sicherheit: Niemals Benutzereingaben direkt in den SQL-String einbetten. Stattdessen stets ?-Platzhalter und die $bind_args-Parameter von ibase_execute() verwenden, um SQL-Injection zu verhindern.
Ressourcenverwaltung: Das von SELECT-Abfragen zurückgegebene Ergebnis-Ressource sollte nach der Verwendung mit ibase_free_result() freigegeben werden. Die vorbereitete Abfrage-Ressource kann mit ibase_free_query() freigegeben werden, wenn sie nicht mehr benötigt wird.