Signatur
Beschreibung
pg_field_num() ermittelt den numerischen Index einer Ergebnisspalte anhand ihres Namens. Die Rückgabe ist 0-basiert, d. h. die erste Spalte hat den Index 0. Wird der Feldname nicht gefunden, gibt die Funktion -1 zurück.
Diese Funktion ist besonders nützlich, wenn man dynamisch auf Spalten zugreifen möchte, deren Position in der Ergebnismenge nicht vorab bekannt ist, aber deren Name bekannt ist. So kann beispielsweise pg_fetch_row() (die Daten als numerisch indiziertes Array liefert) zusammen mit pg_field_num() verwendet werden, um gezielt auf benannte Spalten zuzugreifen.
Der Feldname wird in der Regel in Kleinbuchstaben angegeben, da PostgreSQL Bezeichner standardmäßig in Kleinbuchstaben umwandelt. Bei Bezeichnern, die in der Abfrage explizit in Anführungszeichen gesetzt wurden, muss auf die genaue Schreibweise geachtet werden.
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. |
|
| $field Pflicht | string | Der Name des gesuchten Feldes (Spalte). Der Name ist in der Regel kleingeschrieben, da PostgreSQL Bezeichner standardmäßig in Kleinbuchstaben normalisiert. |
Rückgabewert
-1 zurückgegeben.Beispiele
Spaltennummer anhand des Feldnamens ermitteln
<?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');
if (!$result) {
die('Abfrage fehlgeschlagen: ' . pg_last_error($conn));
}
$numId = pg_field_num($result, 'id');
$numUsername = pg_field_num($result, 'username');
$numEmail = pg_field_num($result, 'email');
$numUnknown = pg_field_num($result, 'nonexistent');
echo "Spaltennummer 'id': $numId\n"; // 0
echo "Spaltennummer 'username': $numUsername\n"; // 1
echo "Spaltennummer 'email': $numEmail\n"; // 2
echo "Spaltennummer 'nonexistent': $numUnknown\n"; // -1
pg_free_result($result);
pg_close($conn);
Gezielter Zugriff auf Spalten mit pg_fetch_row()
<?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 LIMIT 3');
if (!$result) {
die('Abfrage fehlgeschlagen: ' . pg_last_error($conn));
}
// Spaltennummern einmal vorab bestimmen
$colUsername = pg_field_num($result, 'username');
$colEmail = pg_field_num($result, 'email');
if ($colUsername === -1 || $colEmail === -1) {
die('Erwartete Spalte nicht vorhanden.');
}
while ($row = pg_fetch_row($result)) {
echo 'Benutzer: ' . htmlspecialchars($row[$colUsername])
. ' | E-Mail: ' . htmlspecialchars($row[$colEmail]) . "\n";
}
pg_free_result($result);
pg_close($conn);
// Wichtig · Fallstricke
Groß-/Kleinschreibung: PostgreSQL normalisiert nicht in Anführungszeichen gesetzte Bezeichner automatisch zu Kleinbuchstaben. Wurde ein Spaltenalias in der SQL-Abfrage in doppelten Anführungszeichen definiert (z. B. SELECT id AS "UserID"), muss der exakte Name inklusive Groß-/Kleinschreibung übergeben werden.
Rückgabe -1 prüfen: Es empfiehlt sich, den Rückgabewert immer auf -1 zu prüfen, bevor der Index weiterverwendet wird, um Laufzeitfehler beim Zugriff auf nicht existente Spalten zu vermeiden.
Ab PHP 8.1 ist der Parameter $result vom Typ PgSql\Result (Objekt) anstelle der älteren resource.