Signatur
Beschreibung
fbird_execute() führt eine SQL-Abfrage aus, die zuvor mit fbird_prepare() vorbereitet wurde. Die Funktion ist ein Alias für ibase_execute() und gehört zur Firebird/InterBase-Datenbankschnittstelle von PHP.
Der Hauptvorteil gegenüber fbird_query() liegt im Prepared-Statement-Konzept: Die SQL-Abfrage wird einmal analysiert und kompiliert, danach kann sie mehrfach mit unterschiedlichen Parametern ausgeführt werden – das spart Verarbeitungszeit und schützt vor SQL-Injection, da Werte und SQL-Logik sauber getrennt sind.
Parameterwerte werden als zusätzliche Argumente nach dem $query-Handle übergeben. Die Platzhalter in der vorbereiteten Abfrage werden dabei in der Reihenfolge der übergebenen Parameter ersetzt. Bei SELECT-Abfragen wird ein Ergebnis-Handle zurückgegeben, das mit fbird_fetch_row() oder ähnlichen Funktionen ausgelesen werden kann; bei anderen Abfragetypen wird true zurückgegeben.
Hinweis: Diese Funktion ist seit PHP 8.4 nicht mehr Teil des PHP-Kerns und wurde in die PECL-Erweiterung ibase ausgelagert. Für neue Projekte sollte die entsprechende PDO-Erweiterung oder eine aktiv gewartete Bibliothek in Betracht gezogen werden.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $query Pflicht | resource | Ein vorbereitetes Abfrage-Handle, das von fbird_prepare() zurückgegeben wurde. |
|
| $values | mixed | Beliebig viele optionale Werte, die den Platzhaltern (?) in der vorbereiteten Abfrage entsprechen. Die Anzahl der Werte muss mit der Anzahl der Platzhalter übereinstimmen. |
Rückgabewert
SELECT-Abfragen wird ein Ergebnis-Handle zurückgegeben, das mit Fetch-Funktionen ausgelesen werden kann. Bei DML-Abfragen (INSERT, UPDATE, DELETE) wird true bei Erfolg zurückgegeben. Im Fehlerfall wird false zurückgegeben.Beispiele
Mehrfaches Ausführen einer INSERT-Abfrage mit verschiedenen Werten
<?php
$dbh = fbird_connect('localhost:mydb', 'user', 'password');
// Abfrage einmal vorbereiten
$stmt = fbird_prepare($dbh, 'INSERT INTO kunden (name, email) VALUES (?, ?)');
$kunden = [
['Max Mustermann', 'max@example.com'],
['Erika Muster', 'erika@example.com'],
['John Doe', 'john@example.com'],
];
foreach ($kunden as [$name, $email]) {
// Abfrage mit verschiedenen Parametern wiederverwenden
if (!fbird_execute($stmt, $name, $email)) {
echo "Fehler beim Einfügen von: $name\n";
} else {
echo "Eingefügt: $name\n";
}
}
fbird_commit($dbh);
fbird_close($dbh);
SELECT-Abfrage mit Parameter und Ergebnisausgabe
<?php
$dbh = fbird_connect('localhost:mydb', 'user', 'password');
$stmt = fbird_prepare($dbh, 'SELECT id, name, email FROM kunden WHERE id = ?');
$result = fbird_execute($stmt, 42);
if ($result) {
while ($row = fbird_fetch_assoc($result)) {
echo 'ID: ' . $row['ID'] . ', Name: ' . $row['NAME'] . ', E-Mail: ' . $row['EMAIL'] . "\n";
}
} else {
echo 'Abfrage fehlgeschlagen.';
}
fbird_free_result($result);
fbird_close($dbh);
// Wichtig · Fallstricke
Deprecation/Verfügbarkeit: Die fbird_*-Funktionen sind Aliase der ibase_*-Funktionen. Ab PHP 8.4 wurde die InterBase/Firebird-Erweiterung aus dem PHP-Kern entfernt und steht nur noch über PECL zur Verfügung. Für neue Projekte wird PDO mit einem geeigneten Firebird-Treiber empfohlen.
SQL-Injection: Obwohl Prepared Statements grundsätzlich vor SQL-Injection schützen, sollten übergebene Werte dennoch auf Plausibilität geprüft werden. Niemals rohe Benutzereingaben ohne Validierung weitergeben.
Transaktionen: Standardmäßig werden Änderungen nicht automatisch festgeschrieben. Nach DML-Operationen muss explizit fbird_commit() aufgerufen werden, sonst werden die Änderungen bei Verbindungsende verworfen.
Parameteranzahl: Die Anzahl der übergebenen Werte muss exakt mit der Anzahl der ?-Platzhalter in der vorbereiteten Abfrage übereinstimmen, sonst schlägt die Ausführung fehl.