Signatur
Beschreibung
pg_field_name() ermittelt den Namen einer Spalte in einem PostgreSQL-Abfrageergebnis. Der Feldname entspricht dem Spaltennamen, wie er in der SELECT-Abfrage definiert oder durch einen Alias vergeben wurde. Dies ist besonders nützlich, wenn die Struktur der Ergebnismenge dynamisch verarbeitet werden soll, ohne die Spaltennamen vorher zu kennen.
Die Funktion arbeitet gemeinsam mit pg_num_fields(), um alle Spaltennamen eines Ergebnisses zu iterieren. So lassen sich z. B. generische Export-Funktionen oder selbstbeschreibende Tabellenausgaben implementieren, ohne die SQL-Abfrage hart zu kodieren.
Der Index $field ist nullbasiert, d. h. die erste Spalte hat den Index 0. Wird ein ungültiger Index übergeben, gibt die Funktion einen Laufzeitfehler aus.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $result Pflicht | PgSql\Result | Eine PostgreSQL-Ergebnis-Instanz, wie sie von pg_query(), pg_query_params() o. Ä. zurückgegeben wird. |
|
| $field Pflicht | int | Nullbasierter Index des Feldes, dessen Name abgerufen werden soll. Gültige Werte liegen zwischen 0 und pg_num_fields($result) - 1. |
Rückgabewert
Beispiele
Alle Spaltennamen eines Abfrageergebnisses ausgeben
<?php
$conn = pg_connect('host=localhost dbname=testdb user=postgres password=secret');
if (!$conn) {
die('Verbindung fehlgeschlagen.');
}
$result = pg_query($conn, 'SELECT id, vorname, nachname FROM kunden LIMIT 1');
if (!$result) {
die('Abfrage fehlgeschlagen: ' . pg_last_error($conn));
}
$anzahlFelder = pg_num_fields($result);
echo "Gefundene Spalten: $anzahlFelder\n";
for ($i = 0; $i < $anzahlFelder; $i++) {
echo "Spalte $i: " . pg_field_name($result, $i) . "\n";
}
pg_free_result($result);
pg_close($conn);
Dynamische HTML-Tabelle aus PostgreSQL-Ergebnis erzeugen
<?php
$conn = pg_connect('host=localhost dbname=testdb user=postgres password=secret');
$result = pg_query($conn, 'SELECT id, titel, preis FROM produkte LIMIT 5');
$anzahlFelder = pg_num_fields($result);
echo '<table border="1">';
// Kopfzeile mit Spaltennamen
echo '<tr>';
for ($i = 0; $i < $anzahlFelder; $i++) {
echo '<th>' . htmlspecialchars(pg_field_name($result, $i)) . '</th>';
}
echo '</tr>';
// Datenzeilen
while ($zeile = pg_fetch_row($result)) {
echo '<tr>';
foreach ($zeile as $wert) {
echo '<td>' . htmlspecialchars((string)$wert) . '</td>';
}
echo '</tr>';
}
echo '</table>';
pg_free_result($result);
pg_close($conn);
// Wichtig · Fallstricke
Versionshinweis: Ab PHP 8.1 ist der erste Parameter vom Typ PgSql\Result (ein echtes Objekt) statt der älteren Ressource. Code, der die Funktion mit einer Ressource aufruft, muss ggf. angepasst werden.
Der zurückgegebene Feldname wird stets in Kleinbuchstaben ausgegeben, sofern PostgreSQL die Spalte nicht mit Anführungszeichen und gemischter Groß-/Kleinschreibung definiert hat. SQL-Aliase wie SELECT preis AS "Verkaufspreis" werden als Feldname übernommen.
Bei ungültigem Index (z. B. negativer Wert oder Index >= pg_num_fields()) wird ein PHP-Fehler ausgelöst; eine Bereichsprüfung vor dem Aufruf ist empfehlenswert.