Signatur
Beschreibung
pg_fetch_result() ermöglicht den direkten Zugriff auf einen einzelnen Wert innerhalb eines PostgreSQL-Abfrageergebnisses, ohne eine gesamte Zeile abrufen zu müssen. Die Funktion eignet sich besonders dann, wenn nur ein bestimmtes Feld aus dem Ergebnis benötigt wird, beispielsweise nach SELECT COUNT(*) oder ähnlichen Aggregatabfragen.
Der Parameter $field kann entweder als numerischer Index (0-basiert) oder als Spaltenname (String) angegeben werden. Ist der gesuchte Wert in der Datenbank NULL, gibt die Funktion null zurück; bei einem Fehler (z. B. ungültige Zeile oder Spalte) wird false zurückgegeben.
Alle zurückgegebenen Werte werden als PHP-Strings geliefert, unabhängig vom PostgreSQL-Datentyp der Spalte. Eine explizite Typumwandlung durch den Entwickler ist daher in der Regel erforderlich, wenn numerische oder boolesche Werte weiterverarbeitet werden sollen.
Ab PHP 8.1.0 wird die bisherige Ressource durch das PgSql\Result-Objekt ersetzt. Die Funktion ist eine kompakte Alternative zu pg_fetch_row() oder pg_fetch_assoc(), wenn lediglich ein einzelner Skalarwert benötigt wird.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $result Pflicht | PgSql\Result | Eine PostgreSQL-Ergebnisinstanz, die von Funktionen wie pg_query() oder pg_execute() zurückgegeben wurde. |
|
| $row Pflicht | int | Der 0-basierte Zeilenindex der abzurufenden Zeile im Ergebnis. | |
| $field Pflicht | string|int | Die abzurufende Spalte, entweder als 0-basierter numerischer Index oder als Spaltenname (String). |
Rückgabewert
string zurück. Ist der Wert in der Datenbank NULL, wird null zurückgegeben. Bei einem Fehler (ungültige Zeile, ungültige Spalte) wird false zurückgegeben.Beispiele
Einzelnen Zähler aus einer COUNT-Abfrage abrufen
<?php
$conn = pg_connect('host=localhost dbname=testdb user=postgres password=secret');
if (!$conn) {
die('Verbindung fehlgeschlagen');
}
$result = pg_query($conn, 'SELECT COUNT(*) FROM benutzer');
if (!$result) {
die('Abfrage fehlgeschlagen: ' . pg_last_error($conn));
}
$anzahl = (int) pg_fetch_result($result, 0, 0);
echo "Anzahl Benutzer: $anzahl\n";
pg_free_result($result);
pg_close($conn);
Feldwert per Spaltenname abrufen
<?php
$conn = pg_connect('host=localhost dbname=testdb user=postgres password=secret');
if (!$conn) {
die('Verbindung fehlgeschlagen');
}
$result = pg_query($conn, "SELECT vorname, nachname, email FROM benutzer WHERE id = 1");
if (!$result) {
die('Abfrage fehlgeschlagen: ' . pg_last_error($conn));
}
$email = pg_fetch_result($result, 0, 'email');
if ($email === false) {
echo "Ungültige Zeile oder Spalte.\n";
} elseif ($email === null) {
echo "E-Mail-Adresse ist NULL.\n";
} else {
echo "E-Mail: " . htmlspecialchars($email) . "\n";
}
pg_free_result($result);
pg_close($conn);
// Wichtig · Fallstricke
Typumwandlung: Alle Rückgabewerte sind PHP-Strings, auch wenn die PostgreSQL-Spalte einen numerischen oder booleschen Typ hat. Verwende explizite Casts wie (int), (float) oder vergleiche boolesche Werte mit === 't' (PostgreSQL gibt für TRUE den String 't' zurück).
NULL-Prüfung: Achte darauf, den Rückgabewert mit === null (und nicht mit == false) auf NULL zu prüfen, da sonst eine leere Zeichenkette ('') ebenfalls als falsy interpretiert werden könnte.
Ab PHP 8.1.0: Der Parameter $result erwartet eine Instanz von PgSql\Result statt einer klassischen Ressource. Älterer Code, der mit resource-Typen arbeitet, muss ggf. angepasst werden.