Start · Sprachen · PHP · Referenz · pg_field_type

pg_field_type

Funktion

Gibt den PostgreSQL-Datentyp eines bestimmten Feldes (Spalte) als Zeichenkette zurück.

seit PHP 4.2.0 Kategorie: db

Signatur

pg_field_type(PgSql\Result $result, int $field): string

Beschreibung

pg_field_type() liefert den Namen des PostgreSQL-Datentyps für eine bestimmte Spalte eines Ergebnisses, das zuvor mit einer Funktion wie pg_query() oder pg_execute() erzeugt wurde. Die Rückgabe ist der typische PostgreSQL-Typname, z. B. int4, varchar, bool oder text.

Diese Funktion ist nützlich, wenn man zur Laufzeit prüfen möchte, welchen Datentyp eine bestimmte Spalte hat – etwa um eine dynamische Typisierung, eine ORM-Schicht oder ein generisches Export-Werkzeug zu implementieren. Die Feldindizierung beginnt bei 0.

Zu beachten ist, dass der zurückgegebene Typname dem internen PostgreSQL-Typnamen entspricht (z. B. int4 statt integer). Wenn der Typ aus einer benutzerdefinierten Domäne oder einem Composite-Typ stammt, wird der entsprechende Name zurückgegeben. Für die zugehörige PostgreSQL-OID des Typs kann pg_field_type_oid() verwendet werden.

Parameter

Name Typ Default Beschreibung
$result Pflicht PgSql\Result Eine PostgreSQL-Ergebnisinstanz, wie sie von pg_query(), pg_query_params() oder pg_execute() zurückgegeben wird.
$field Pflicht int Der nullbasierte Index der Spalte im Ergebnis. Die erste Spalte hat den Index 0.

Rückgabewert

Typ
string
Beschreibung
Gibt den PostgreSQL-internen Typnamen der angegebenen Spalte als Zeichenkette zurück, z. B. int4, varchar, text oder bool. Bei einem Fehler wird false zurückgegeben.

Beispiele

Datentypen aller Spalten 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, name, created_at FROM users LIMIT 1');
if (!$result) {
    die('Abfrage fehlgeschlagen');
}

$numFields = pg_num_fields($result);
for ($i = 0; $i < $numFields; $i++) {
    $fieldName = pg_field_name($result, $i);
    $fieldType = pg_field_type($result, $i);
    echo "Spalte $i: $fieldName => $fieldType\n";
}

pg_free_result($result);
pg_close($conn);
Spalte 0: id => int4 Spalte 1: name => varchar Spalte 2: created_at => timestamp

Typbasierte Verarbeitung von Abfrageergebnissen

<?php
$conn = pg_connect('host=localhost dbname=testdb user=postgres password=secret');
$result = pg_query($conn, 'SELECT active, score, label FROM products LIMIT 5');

$rows = [];
while ($row = pg_fetch_assoc($result)) {
    $typedRow = [];
    foreach ($row as $colIndex => $value) {
        // Spaltennamen in Index umwandeln
        $fieldIndex = array_search($colIndex, array_keys($row));
        $type = pg_field_type($result, $fieldIndex);

        if ($type === 'bool') {
            $typedRow[$colIndex] = ($value === 't');
        } elseif (in_array($type, ['int2', 'int4', 'int8'], true)) {
            $typedRow[$colIndex] = (int)$value;
        } elseif (in_array($type, ['float4', 'float8', 'numeric'], true)) {
            $typedRow[$colIndex] = (float)$value;
        } else {
            $typedRow[$colIndex] = $value;
        }
    }
    $rows[] = $typedRow;
}

var_dump($rows[0]);
array(3) { ["active"]=> bool(true) ["score"]=> float(9.5) ["label"]=> string(7) "Premium" }

// Wichtig · Fallstricke

Der zurückgegebene Typname ist der interne PostgreSQL-Typname und entspricht nicht zwingend dem SQL-Standardnamen. So heißt integer intern int4, bigint heißt int8 und boolean heißt bool.

Ab PHP 8.1 ist der erste Parameter vom Typ PgSql\Result (Objekt) statt der älteren Ressource. Code, der auf den alten Ressourcentyp prüft, muss entsprechend angepasst werden.

Für die PostgreSQL-interne OID des Datentyps steht pg_field_type_oid() zur Verfügung, was in Kombination mit dem PostgreSQL-Systemkatalog pg_type für erweiterte Typinformationen genutzt werden kann.