Start · Sprachen · PHP · Referenz · pg_fetch_all_columns

pg_fetch_all_columns

Funktion

Gibt alle Werte einer bestimmten Spalte eines PostgreSQL-Abfrageergebnisses als indiziertes Array zurück.

seit PHP 5.1.0 Kategorie: db

Signatur

pg_fetch_all_columns(PgSql\Result $result, int $field = 0): array

Beschreibung

pg_fetch_all_columns() liest alle Zeilen einer bestimmten Spalte aus einem PostgreSQL-Abfrageergebnis aus und gibt sie als einfaches, numerisch indiziertes Array zurück. Dabei wird der Spalten-Index (nullbasiert) über den Parameter field angegeben.

Die Funktion ist besonders nützlich, wenn man ausschließlich die Werte einer einzigen Spalte benötigt – etwa alle IDs, alle E-Mail-Adressen oder alle Bezeichnungen – ohne die vollständige Zeilenstruktur verarbeiten zu müssen. Sie erspart eine manuelle Schleife über pg_fetch_row() oder pg_fetch_assoc().

NULL-Werte in der Datenbank werden als PHP-null im zurückgegebenen Array abgebildet. Das Ergebnis-Array ist immer numerisch indiziert, beginnend bei 0, unabhängig von der ursprünglichen Reihenfolge der Datenbankzeilen.

Ist das Abfrageergebnis leer (keine Zeilen), wird ein leeres Array zurückgegeben. Bei einem ungültigen Spalten-Index wird ein Fehler ausgelöst.

Parameter

Name Typ Default Beschreibung
$result Pflicht PgSql\Result Eine PgSql\Result-Instanz, die von pg_query(), pg_query_params() oder pg_execute() zurückgegeben wurde.
$field int 0 Der nullbasierte Index der Spalte, deren Werte zurückgegeben werden sollen. Standardmäßig wird die erste Spalte (Index 0) verwendet.

Rückgabewert

Typ
array
Beschreibung
Ein numerisch indiziertes Array mit allen Werten der angegebenen Spalte. Jeder Eintrag entspricht dem Spaltenwert einer Zeile. NULL-Werte aus der Datenbank werden als PHP-null zurückgegeben. Bei einem leeren Ergebnissatz wird ein leeres Array zurückgegeben.

Beispiele

Alle E-Mail-Adressen aus einer Benutzertabelle abrufen

<?php
$conn = pg_connect("host=localhost dbname=mydb user=myuser password=secret");
if (!$conn) {
    die('Verbindung fehlgeschlagen');
}

$result = pg_query($conn, "SELECT email FROM users ORDER BY id");
if (!$result) {
    die('Abfrage fehlgeschlagen: ' . pg_last_error($conn));
}

// Alle E-Mail-Adressen aus der ersten Spalte (Index 0) holen
$emails = pg_fetch_all_columns($result, 0);

foreach ($emails as $email) {
    echo $email . PHP_EOL;
}

pg_free_result($result);
pg_close($conn);
alice@example.com bob@example.com charlie@example.com

Spalte per Index aus einer Multi-Spalten-Abfrage auslesen

<?php
$conn = pg_connect("host=localhost dbname=mydb user=myuser password=secret");
if (!$conn) {
    die('Verbindung fehlgeschlagen');
}

// Abfrage liefert id (Index 0), name (Index 1), status (Index 2)
$result = pg_query($conn, "SELECT id, name, status FROM products WHERE active = true");
if (!$result) {
    die('Abfrage fehlgeschlagen: ' . pg_last_error($conn));
}

// Nur die Produktnamen (Spalte Index 1) abrufen
$names = pg_fetch_all_columns($result, 1);

echo 'Aktive Produkte: ' . implode(', ', $names) . PHP_EOL;

// Anzahl der zurückgegebenen Einträge
echo 'Anzahl: ' . count($names) . PHP_EOL;

pg_free_result($result);
pg_close($conn);
Aktive Produkte: Laptop, Maus, Tastatur Anzahl: 3

// Wichtig · Fallstricke

Ungültiger Spalten-Index: Wird ein field-Index angegeben, der außerhalb des gültigen Bereichs liegt (kleiner als 0 oder größer/gleich der Anzahl der Spalten im Ergebnis), erzeugt PHP einen Fehler vom Typ ValueError (ab PHP 8.0) bzw. eine Warnung in älteren Versionen.

Zeigerposition: Im Gegensatz zu zeilenweisen Fetch-Funktionen liest pg_fetch_all_columns() immer alle Zeilen ab, unabhängig von der aktuellen internen Zeigerposition des Ergebnisses.

Speicher: Bei sehr großen Ergebnismengen kann das vollständige Einlesen aller Werte in ein Array speicherintensiv sein. In solchen Fällen kann eine zeilenweise Verarbeitung mit pg_fetch_row() in einer Schleife vorzuziehen sein.