Start · Sprachen · PHP · Referenz · ibase_execute

ibase_execute

Funktion

Führt eine zuvor mit <code>ibase_prepare()</code> vorbereitete InterBase/Firebird-Abfrage aus und gibt bei SELECT-Abfragen ein Ergebnis-Ressource zurück.

seit PHP 5.0.0 Kategorie: db

Signatur

ibase_execute(resource $query, mixed ...$bind_args): resource|bool

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

Typ
resource|bool
Beschreibung
Bei 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);
?>
Eingefügt: Anna Müller Eingefügt: Ben Schmidt Eingefügt: Clara Fischer

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);
?>
ID: 2 Name: Ben Schmidt E-Mail: ben@example.com

// 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.