Signatur
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
0zurück, wenn das Ergebnis keine Spalten enthält (z. B. bei einemINSERT-Statement ohneRETURNING). - 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
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);
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);
// 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.