Start · Sprachen · PHP · Referenz · pg_field_type_oid

pg_field_type_oid

Funktion

Gibt die OID (Object Identifier) des PostgreSQL-Datentyps eines Feldes aus einem Abfrageergebnis zurück.

seit PHP 5.1.0 Kategorie: db

Signatur

pg_field_type_oid(PgSql\Result $result, int $field): string|false

Beschreibung

pg_field_type_oid() liefert die interne PostgreSQL-OID (Object Identifier) des Datentyps für eine bestimmte Spalte eines Abfrageergebnisses. Im Gegensatz zu pg_field_type(), das den Typnamen als lesbaren String zurückgibt, liefert diese Funktion die numerische OID, die PostgreSQL intern zur Identifikation von Datentypen verwendet.

Die OID ist besonders nützlich, wenn man mit benutzerdefinierten PostgreSQL-Typen arbeitet, deren Typname variieren kann (z. B. bei unterschiedlichen Datenbankversionen oder bei selbst definierten Typen). Anhand der OID lässt sich der Typ eindeutig identifizieren und bei Bedarf über die Systemtabelle pg_type weiter abfragen.

Der Parameter field ist nullbasiert, d. h. die erste Spalte hat den Index 0. Um von einer OID auf den Typnamen zu schließen, kann eine SQL-Abfrage wie SELECT typname FROM pg_type WHERE oid = $oid verwendet werden.

Diese Funktion eignet sich gut für Debugging-Zwecke, für die Entwicklung generischer Datenbankabstraktionsschichten sowie für Anwendungsfälle, in denen PostgreSQL-spezifische Typinformationen benötigt werden.

Parameter

Name Typ Default Beschreibung
$result Pflicht PgSql\Result Eine PgSql\Result-Instanz, die von Funktionen wie pg_query(), pg_query_params() oder pg_execute() zurückgegeben wurde.
$field Pflicht int Nullbasierter Index der Spalte im Ergebnis-Set. Die erste Spalte hat den Index 0.

Rückgabewert

Typ
string|false
Beschreibung
Gibt die OID des PostgreSQL-Datentyps der angegebenen Spalte als string zurück. Bei einem Fehler (z. B. ungültiger Spaltenindex) wird false zurückgegeben.

Beispiele

OID eines Feldes ermitteln

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

$result = pg_query($conn, 'SELECT id, name, created_at FROM users LIMIT 1');
if (!$result) {
    die('Abfrage fehlgeschlagen');
}

for ($i = 0; $i < pg_num_fields($result); $i++) {
    $feldName = pg_field_name($result, $i);
    $typName  = pg_field_type($result, $i);
    $oid      = pg_field_type_oid($result, $i);
    echo "Feld: $feldName | Typ: $typName | OID: $oid\n";
}

pg_free_result($result);
pg_close($conn);
Feld: id | Typ: int4 | OID: 23 Feld: name | Typ: varchar | OID: 1043 Feld: created_at | Typ: timestamp | OID: 1114

OID über pg_type-Systemtabelle auflösen

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

$result = pg_query($conn, 'SELECT my_custom_column FROM my_table LIMIT 1');
if (!$result) {
    die('Abfrage fehlgeschlagen');
}

$oid = pg_field_type_oid($result, 0);
echo "OID der Spalte: $oid\n";

// OID über Systemtabelle auflösen
$typeResult = pg_query_params(
    $conn,
    'SELECT typname, typlen FROM pg_type WHERE oid = $1',
    [$oid]
);

if ($row = pg_fetch_assoc($typeResult)) {
    echo "Typname: " . $row['typname'] . "\n";
    echo "Typläne: " . $row['typlen'] . "\n";
}

pg_free_result($result);
pg_free_result($typeResult);
pg_close($conn);
OID der Spalte: 23 Typname: int4 Typläne: 4

// Wichtig · Fallstricke

Hinweis zur Portabilität: OIDs sind datenbankspezifisch und können sich zwischen verschiedenen PostgreSQL-Installationen unterscheiden. Insbesondere bei benutzerdefinierten Typen (erstellt mit CREATE TYPE) ist die OID nicht stabil und sollte nicht hartcodiert werden.

PHP-Version: Ab PHP 8.1 ist der Parameter result vom Typ PgSql\Result (Objekt). In älteren PHP-Versionen war es eine Ressource vom Typ resource.

Spaltenindex: Ein ungültiger (zu hoher oder negativer) Spaltenindex führt zu einer Warnung und zum Rückgabewert false. Es empfiehlt sich, vorher mit pg_num_fields() die Anzahl der Felder zu prüfen.