Start · Sprachen · PHP · Referenz · ibase_fetch_row

ibase_fetch_row

Funktion

Ruft eine einzelne Zeile aus einem InterBase/Firebird-Abfrageergebnis als numerisch indiziertes Array ab.

seit PHP 5.0.0 Kategorie: db

Signatur

ibase_fetch_row(resource $result, int $fetch_flags = 0): array|false

Beschreibung

ibase_fetch_row() liest die nächste Zeile aus einem InterBase- oder Firebird-Abfrageergebnis und gibt diese als numerisch indiziertes Array zurück. Jeder Aufruf rückt den internen Zeiger um eine Position vor, sodass durch wiederholtes Aufrufen in einer Schleife alle Zeilen des Ergebnisses nacheinander verarbeitet werden können.

Die Indizes des zurückgegebenen Arrays beginnen bei 0 und entsprechen der Reihenfolge der in der SELECT-Abfrage angegebenen Spalten. Für spaltenbasierte Zugriffe per Name empfiehlt sich stattdessen ibase_fetch_assoc(). Wenn alle Zeilen gelesen wurden, gibt die Funktion false zurück, was typischerweise als Schleifenbedingung genutzt wird.

Mit dem optionalen Parameter fetch_flags kann das Verhalten für bestimmte Datentypen gesteuert werden, z. B. ob BLOB-Inhalte direkt abgerufen (IBASE_FETCH_BLOBS) oder Arrays inline geladen werden sollen (IBASE_FETCH_ARRAYS).

Hinweis: Die gesamte ibase_*-Erweiterung (ext/interbase) wurde in PHP 7.4 als veraltet markiert und in PHP 8.0 aus dem offiziellen PHP-Kern entfernt. Für neue Projekte sollte die ibase_*-Erweiterung über PECL oder die Nachfolger-Extension Firebird/Interbase PDO (pdo_firebird) verwendet werden.

Parameter

Name Typ Default Beschreibung
$result Pflicht resource Eine gültige InterBase-Ergebnisressource, die zuvor durch ibase_query() oder ibase_execute() erzeugt wurde.
$fetch_flags int 0 Optionale Flags zur Steuerung des Abrufverhaltens. Mögliche Werte sind IBASE_FETCH_BLOBS (BLOB-Inhalte direkt laden) und IBASE_FETCH_ARRAYS (InterBase-Arrays inline laden). Mehrere Flags können per bitweisem OR (|) kombiniert werden.

Rückgabewert

Typ
array|false
Beschreibung
Gibt ein numerisch indiziertes Array zurück, das die Spaltenwerte der aktuellen Zeile enthält (Index beginnt bei 0). Gibt false zurück, wenn keine weiteren Zeilen vorhanden sind oder ein Fehler auftritt.

Beispiele

Alle Zeilen einer Tabelle mit ibase_fetch_row() einlesen

<?php
// Datenbankverbindung aufbauen
$dbh = ibase_connect('/var/lib/firebird/data/mydb.fdb', 'sysdba', 'masterkey');

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

// Abfrage ausführen
$result = ibase_query($dbh, 'SELECT ID, NAME, EMAIL FROM USERS ORDER BY ID');

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

// Zeilenweise einlesen
while ($row = ibase_fetch_row($result)) {
    // $row[0] = ID, $row[1] = NAME, $row[2] = EMAIL
    echo sprintf("ID: %d | Name: %s | E-Mail: %s\n", $row[0], $row[1], $row[2]);
}

// Ressourcen freigeben
ibase_free_result($result);
ibase_close($dbh);
?>
ID: 1 | Name: Max Mustermann | E-Mail: max@example.com ID: 2 | Name: Erika Muster | E-Mail: erika@example.com

BLOB-Inhalte direkt mit IBASE_FETCH_BLOBS laden

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

// Abfrage mit einer BLOB-Spalte (z. B. Dokument-Inhalt)
$result = ibase_query($dbh, 'SELECT ID, TITLE, CONTENT FROM DOCUMENTS WHERE ID = 42');

// IBASE_FETCH_BLOBS sorgt dafür, dass BLOB-Daten direkt als String geladen werden
if ($row = ibase_fetch_row($result, IBASE_FETCH_BLOBS)) {
    echo 'Dokument-ID: ' . $row[0] . "\n";
    echo 'Titel: '       . $row[1] . "\n";
    echo 'Inhalt (' . strlen($row[2]) . ' Bytes): ' . substr($row[2], 0, 100) . "...\n";
}

ibase_free_result($result);
ibase_close($dbh);
?>
Dokument-ID: 42 Titel: Technische Dokumentation Inhalt (2048 Bytes): Lorem ipsum dolor sit amet...

// Wichtig · Fallstricke

Deprecation / Entfernung: Die ibase_*-Erweiterung wurde in PHP 7.4 als veraltet markiert und in PHP 8.0 vollständig aus dem PHP-Kern entfernt. Für PHP 8+ steht die Erweiterung nur noch über PECL zur Verfügung. Neue Projekte sollten PDO mit dem pdo_firebird-Treiber verwenden, der aktiv gepflegt wird.

Sicherheit: Wie bei allen datenbanknahen Funktionen sollten Benutzereingaben niemals direkt in SQL-Abfragen eingebaut werden. Stattdessen sollten Prepared Statements über ibase_prepare() und ibase_execute() verwendet werden, um SQL-Injection zu verhindern.

Im Gegensatz zu ibase_fetch_assoc() liefert ibase_fetch_row() ausschließlich numerische Indizes. Bei Abfragen mit vielen Spalten kann das den Code schwerer lesbar machen – in solchen Fällen ist ibase_fetch_assoc() vorzuziehen.