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