Start · Sprachen · PHP · Referenz · ibase_query

ibase_query

Funktion

Führt eine SQL-Abfrage auf einer InterBase/Firebird-Datenbankverbindung aus und gibt das Ergebnis-Handle zurück.

seit PHP 5.0.0 Kategorie: db

Signatur

ibase_query(resource $link_identifier = null, string $query, mixed ...$bind_args): resource|false

Beschreibung

ibase_query() sendet eine SQL-Abfrage an eine InterBase- oder Firebird-Datenbank und liefert bei Erfolg ein Ergebnis-Handle (Ressource) zurück, das mit Funktionen wie ibase_fetch_row() oder ibase_fetch_assoc() ausgelesen werden kann. Bei Fehler wird false zurückgegeben.

Die Funktion akzeptiert optional eine Verbindungsressource als erstes Argument. Wird sie weggelassen, verwendet PHP automatisch die zuletzt geöffnete Verbindung. Für parametrisierte Abfragen können zusätzliche Argumente übergeben werden, die intern als Bind-Parameter fungieren und so direkte Wertinterpolation in den SQL-String vermeiden helfen.

Neben SELECT-Abfragen eignet sich ibase_query() auch für DML-Anweisungen wie INSERT, UPDATE und DELETE sowie DDL-Statements. Bei DML-Operationen sollte anschließend ibase_commit() aufgerufen werden, sofern keine Auto-Commit-Verbindung besteht.

Hinweis: Die ibase_*-Funktionen sind seit PHP 7.4 aus dem PHP-Core entfernt worden und stehen nur noch über die PECL-Erweiterung ibase oder die firebird-Erweiterung zur Verfügung.

Parameter

Name Typ Default Beschreibung
$link_identifier resource null Eine Verbindungsressource, die von ibase_connect() oder ibase_pconnect() zurückgegeben wurde. Wird dieser Parameter weggelassen, wird die zuletzt geöffnete Verbindung verwendet.
$query Pflicht string Die auszuführende SQL-Abfrage als Zeichenkette. Parametrisierte Stellen können mit ? als Platzhalter versehen werden, die dann durch die nachfolgenden bind_args-Parameter ersetzt werden.
$bind_args mixed Optionale Bind-Parameter, die den ?-Platzhaltern in der SQL-Abfrage der Reihe nach zugeordnet werden. Dieser Mechanismus hilft, SQL-Injection zu vermeiden.

Rückgabewert

Typ
resource|false
Beschreibung
Gibt bei Erfolg eine Ergebnis-Ressource zurück, die mit ibase_fetch_row(), ibase_fetch_assoc() oder ibase_fetch_object() ausgelesen werden kann. Bei einem Fehler wird false zurückgegeben. Für nicht datensatzliefernde Abfragen (z. B. INSERT, UPDATE) wird ebenfalls eine Ressource zurückgegeben, die jedoch keine Zeilen enthält.

Beispiele

Einfache SELECT-Abfrage mit ibase_query

<?php
$conn = ibase_connect('localhost:/var/lib/firebird/mydb.fdb', 'sysdba', 'masterkey');

if (!$conn) {
    die('Verbindung fehlgeschlagen: ' . ibase_errmsg());
}

$result = ibase_query($conn, 'SELECT id, name FROM users ORDER BY name');

if ($result === false) {
    die('Abfrage fehlgeschlagen: ' . ibase_errmsg());
}

while ($row = ibase_fetch_assoc($result)) {
    echo $row['ID'] . ': ' . $row['NAME'] . "\n";
}

ibase_free_result($result);
ibase_close($conn);
1: Anna Müller 2: Hans Schmidt 3: Maria Weber

Parametrisiertes INSERT mit Bind-Parametern

<?php
$conn = ibase_connect('localhost:/var/lib/firebird/mydb.fdb', 'sysdba', 'masterkey');

$username = 'Neuer Benutzer';
$email    = 'neuer@example.com';

// Parametrisierte Abfrage mit ? als Platzhalter
$result = ibase_query(
    $conn,
    'INSERT INTO users (name, email) VALUES (?, ?)',
    $username,
    $email
);

if ($result === false) {
    echo 'Fehler beim Einfügen: ' . ibase_errmsg();
} else {
    ibase_commit($conn);
    echo 'Datensatz erfolgreich eingefügt.';
}

ibase_close($conn);
Datensatz erfolgreich eingefügt.

// Wichtig · Fallstricke

Deprecation / Verfügbarkeit: Die gesamte ibase_*-Erweiterung wurde mit PHP 7.4 aus dem PHP-Core entfernt. Für PHP 7.4 und höher muss die PECL-Erweiterung ibase bzw. php-firebird separat installiert werden.

Sicherheit: Benutzerübergebene Werte sollten niemals direkt in den SQL-String interpoliert werden. Nutze stattdessen die Bind-Parameter (?-Platzhalter), um SQL-Injection zu verhindern.

Transaktionen: Standardmäßig arbeitet InterBase/Firebird nicht im Auto-Commit-Modus. Nach schreibenden Operationen (INSERT, UPDATE, DELETE) muss ibase_commit() aufgerufen werden, damit die Änderungen dauerhaft gespeichert werden. Andernfalls werden sie bei Verbindungsende automatisch zurückgerollt.

Ressourcen freigeben: Nach der Verwendung eines Ergebnis-Handles sollte ibase_free_result() aufgerufen werden, um den Speicher wieder freizugeben, insbesondere bei großen Ergebnismengen oder Skripten mit vielen Abfragen.