Start · Sprachen · PHP · Referenz · pg_num_fields

pg_num_fields

Funktion

Gibt die Anzahl der Spalten (Felder) in einem PostgreSQL-Abfrageergebnis zurück.

seit PHP 4.2.0 Kategorie: db

Signatur

pg_num_fields(PgSql\Result $result): int

Beschreibung

pg_num_fields() ermittelt, wie viele Spalten das übergebene PostgreSQL-Ergebnisressource enthält. Dies entspricht der Breite der Ergebnistabelle – also der Anzahl der SELECT-Felder bzw. der Spalten einer Tabelle bei SELECT *.

Die Funktion ist besonders nützlich, wenn Abfragen dynamisch aufgebaut werden oder wenn Ergebnisstrukturen zur Laufzeit unbekannt sind. In solchen Fällen kann man mit pg_num_fields() die Anzahl der Felder ermitteln und gemeinsam mit pg_field_name() alle Spaltennamen auslesen, ohne diese hart kodieren zu müssen.

Typische Einsatzgebiete sind generische Datenbanktools, Export-Funktionen (z. B. CSV-Generierung) oder Debug-Ausgaben, bei denen die Tabellenstruktur zur Laufzeit analysiert werden soll.

  • Gibt 0 zurück, wenn das Ergebnis keine Spalten enthält (z. B. bei einem INSERT-Statement ohne RETURNING).
  • Kann auf jedes gültige PgSql\Result-Objekt angewendet werden, unabhängig von der Anzahl der Zeilen.

Parameter

Name Typ Default Beschreibung
$result Pflicht PgSql\Result Ein PostgreSQL-Ergebnisobjekt vom Typ PgSql\Result, das durch Funktionen wie pg_query(), pg_query_params() oder pg_execute() zurückgegeben wurde.

Rückgabewert

Typ
int
Beschreibung
Gibt die Anzahl der Spalten im Abfrageergebnis als ganzzahligen Wert zurück. Gibt 0 zurück, wenn das Ergebnis keine Spalten besitzt (z. B. bei DML-Statements ohne RETURNING-Klausel).

Beispiele

Anzahl der Spalten einer SELECT-Abfrage ermitteln

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

$result = pg_query($conn, 'SELECT id, name, email FROM users LIMIT 1');
if (!$result) {
    die('Abfragefehler: ' . pg_last_error($conn));
}

$anzahl = pg_num_fields($result);
echo 'Anzahl der Spalten: ' . $anzahl . PHP_EOL;

pg_free_result($result);
pg_close($conn);
Anzahl der Spalten: 3

Spaltennamen dynamisch auslesen

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

$result = pg_query($conn, 'SELECT * FROM produkte LIMIT 5');
if (!$result) {
    die('Abfragefehler: ' . pg_last_error($conn));
}

$anzahlFelder = pg_num_fields($result);
echo 'Spalten (' . $anzahlFelder . '):' . PHP_EOL;

for ($i = 0; $i < $anzahlFelder; $i++) {
    echo '  ' . $i . ': ' . pg_field_name($result, $i) . PHP_EOL;
}

pg_free_result($result);
pg_close($conn);
Spalten (4): 0: id 1: bezeichnung 2: preis 3: lagerbestand

// Wichtig · Fallstricke

Vor PHP 8.1 akzeptierte die Funktion eine Ressource vom Typ resource statt eines PgSql\Result-Objekts. Ab PHP 8.1 wurde der Typ auf das Objekt PgSql\Result umgestellt; die Verwendung einer alten Ressource erzeugt einen Deprecation-Hinweis.

Bei Nicht-SELECT-Anweisungen (z. B. INSERT, UPDATE, DELETE ohne RETURNING) liefert die Funktion 0, da kein Spalten-Metadata vorhanden ist.