Signatur
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
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);
?>
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);
?>
// 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.