Start · Sprachen · PHP · Referenz · pg_fetch_row

pg_fetch_row

Funktion

Liest eine Zeile aus einem PostgreSQL-Abfrageergebnis und gibt sie als numerisch indiziertes Array zurück.

seit PHP 4.0.0 Kategorie: db

Signatur

pg_fetch_row(PgSql\Result $result, int|null $row = null, int $mode = PGSQL_NUM): array|false

Beschreibung

pg_fetch_row() liest einen einzelnen Datensatz aus einem PostgreSQL-Ergebnis-Objekt und liefert ihn als numerisch indiziertes Array, bei dem der Index 0 der ersten Spalte entspricht. Die Funktion eignet sich besonders, wenn die Spaltennamen keine Rolle spielen und eine kompakte, speichereffiziente Verarbeitung gewünscht ist.

Wird der Parameter $row weggelassen oder auf null gesetzt, liest die Funktion die jeweils nächste Zeile des Ergebnisses (interner Zeiger). So lässt sie sich komfortabel in einer while-Schleife einsetzen. Wird eine explizite Zeilennummer übergeben, springt der interne Zeiger an diese Position.

Im Gegensatz zu pg_fetch_assoc() (assoziative Schlüssel) oder pg_fetch_array() (beide Varianten) enthält das Rückgabe-Array ausschließlich numerische Schlüssel, was es minimal kleiner im Speicher macht. NULL-Werte aus der Datenbank werden als PHP-null zurückgegeben.

Die Funktion gehört zur PostgreSQL-Erweiterung (pgsql) von PHP und setzt eine aktive Datenbankverbindung sowie ein gültiges Ergebnis-Handle voraus, das z. B. von pg_query() oder pg_execute() geliefert wurde.

Parameter

Name Typ Default Beschreibung
$result Pflicht PgSql\Result Ein PostgreSQL-Ergebnis-Objekt, das von pg_query(), pg_query_params() oder pg_execute() zurückgegeben wurde.
$row int|null null Die Zeilennummer (0-basiert), die gelesen werden soll. Wird null übergeben oder der Parameter weggelassen, wird die nächste Zeile gemäß internem Zeiger gelesen.
$mode int PGSQL_NUM Legt fest, wie das Array aufgebaut wird. Standardmäßig PGSQL_NUM (numerisch). Dieser Parameter ist für pg_fetch_row() normalerweise bedeutungslos, da die Funktion immer numerische Schlüssel liefert.

Rückgabewert

Typ
array|false
Beschreibung
Gibt ein numerisch indiziertes Array zurück, das die Spaltenwerte der gelesenen Zeile enthält. Gibt false zurück, wenn keine weitere Zeile vorhanden ist oder ein Fehler aufgetreten ist. NULL-Datenbankwerte werden als PHP-null geliefert.

Beispiele

Alle Zeilen eines Ergebnisses mit einer while-Schleife verarbeiten

<?php
$conn = pg_connect('host=localhost dbname=testdb user=postgres password=secret');
if (!$conn) {
    die('Verbindung fehlgeschlagen');
}

$result = pg_query($conn, 'SELECT id, username, email FROM users ORDER BY id');
if (!$result) {
    die('Abfrage fehlgeschlagen: ' . pg_last_error($conn));
}

while ($row = pg_fetch_row($result)) {
    // $row[0] = id, $row[1] = username, $row[2] = email
    echo sprintf("ID: %d | Benutzer: %s | E-Mail: %s\n", $row[0], $row[1], $row[2]);
}

pg_free_result($result);
pg_close($conn);
ID: 1 | Benutzer: alice | E-Mail: alice@example.com ID: 2 | Benutzer: bob | E-Mail: bob@example.com

Gezielten Datensatz über Zeilennummer abrufen

<?php
$conn = pg_connect('host=localhost dbname=testdb user=postgres password=secret');
$result = pg_query($conn, 'SELECT produkt, preis FROM artikel ORDER BY preis DESC');

// Direkt die drittteuerste Zeile (Index 2) abrufen
$dritte = pg_fetch_row($result, 2);
if ($dritte !== false) {
    echo 'Drittteuerster Artikel: ' . $dritte[0] . ' – ' . number_format($dritte[1], 2) . ' €';
} else {
    echo 'Keine dritte Zeile vorhanden.';
}

pg_free_result($result);
pg_close($conn);
Drittteuerster Artikel: Laptop – 999.99 €

// Wichtig · Fallstricke

Sicherheit: Verwende niemals unsanitierte Benutzereingaben direkt in SQL-Strings. Nutze stattdessen pg_query_params() mit Platzhaltern, um SQL-Injection zu verhindern.

Ressourcen freigeben: Gib Ergebnis-Objekte nach der Verwendung immer mit pg_free_result() frei, um Arbeitsspeicher zu schonen, insbesondere bei großen Ergebnismengen.

Rückgabe bei leerem Ergebnis: Wenn die Abfrage keine Zeilen liefert, gibt der erste Aufruf von pg_fetch_row() sofort false zurück. Prüfe daher stets den Rückgabewert.

PHP 8.1: Ab PHP 8.1 ist der erste Parameter vom Typ PgSql\Result (Objekt) statt der früheren resource-Typisierung.