Signatur
Beschreibung
pg_meta_data() ruft Metainformationen zu den Spalten einer angegebenen PostgreSQL-Tabelle ab. Das Ergebnis ist ein assoziatives Array, dessen Schlüssel die Spaltennamen sind. Jeder Eintrag enthält weitere Informationen wie den Datentyp, die Länge und ob die Spalte nicht NULL sein darf.
Die Funktion ist besonders nützlich, wenn man dynamische Formulare, automatisierte Validierungen oder generische Datenbankzugriffs-Schichten erstellt, bei denen man die Tabellenstruktur zur Laufzeit auswerten möchte – ohne manuell information_schema-Abfragen zu schreiben.
Mit dem optionalen Parameter $extended (ab PHP 5.6) kann man erweiterte Informationen anfordern, darunter z. B. die interne PostgreSQL-Typen-ID (typtype), was bei benutzerdefinierten Typen und Enumerationen hilfreich ist.
Schlägt der Aufruf fehl – etwa weil die Tabelle nicht existiert oder die Verbindung ungültig ist –, gibt die Funktion false zurück.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $connection Pflicht | PgSql\Connection | Eine aktive PostgreSQL-Datenbankverbindung, wie sie von pg_connect() oder pg_pconnect() zurückgegeben wird. |
|
| $table_name Pflicht | string | Der Name der Tabelle, deren Metadaten abgerufen werden sollen. Der Name ist case-sensitiv und kann ein Schema-Präfix enthalten (z. B. 'public.users'). |
|
| $extended | bool | false | Wenn true, werden erweiterte Typinformationen zurückgegeben, darunter typtype und attisarray. Nützlich beim Arbeiten mit benutzerdefinierten PostgreSQL-Typen oder Enumerationen. |
Rückgabewert
num (Spaltenindex), type (PostgreSQL-Typname), len (Länge des Typs), not null (bool), has default (bool), array dims (Anzahl der Array-Dimensionen) und is enum (bool). Bei aktiviertem $extended kommen zusätzliche Felder wie typtype hinzu. Bei einem Fehler wird false zurückgegeben.Beispiele
Spaltennamen und Typen einer Tabelle ausgeben
<?php
$conn = pg_connect('host=localhost dbname=testdb user=postgres password=secret');
if (!$conn) {
die('Verbindung fehlgeschlagen');
}
$meta = pg_meta_data($conn, 'users');
if ($meta === false) {
die('Tabelle nicht gefunden oder Fehler aufgetreten');
}
foreach ($meta as $column => $info) {
echo "Spalte: $column\n";
echo " Typ: " . $info['type'] . "\n";
echo " Not Null: " . ($info['not null'] ? 'ja' : 'nein') . "\n";
echo " Default: " . ($info['has default'] ? 'ja' : 'nein') . "\n";
echo "\n";
}
pg_close($conn);
Erweiterte Metadaten mit $extended = true abrufen
<?php
$conn = pg_connect('host=localhost dbname=testdb user=postgres password=secret');
if (!$conn) {
die('Verbindung fehlgeschlagen');
}
// Erweiterte Informationen anfordern
$meta = pg_meta_data($conn, 'orders', true);
if ($meta === false) {
die('Fehler beim Abrufen der Metadaten');
}
foreach ($meta as $column => $info) {
echo "Spalte: $column\n";
echo " Typ: " . $info['type'] . "\n";
echo " typtype: " . ($info['typtype'] ?? 'n/a') . "\n"; // z. B. 'e' für Enum
echo " Is Enum: " . ($info['is enum'] ? 'ja' : 'nein') . "\n";
echo "\n";
}
pg_close($conn);
// Wichtig · Fallstricke
Schemapräfix: Wenn eine Tabelle nicht im Standardschema liegt, muss der vollständige, qualifizierte Name angegeben werden, z. B. 'myschema.mytable'. Andernfalls schlägt die Funktion fehl.
Sicherheit: Übergeben Sie Tabellennamen niemals ungefiltert aus Benutzereingaben. Da der Tabellenname kein gebundener Parameter ist, besteht ein SQL-Injection-Risiko. Verwenden Sie eine Whitelist erlaubter Tabellennamen oder escapen Sie den Namen mit pg_escape_identifier().
PHP 8.1: Ab PHP 8.1 ist der Verbindungsparameter vom Typ PgSql\Connection statt dem früheren resource-Typ. Älterer Code mit resource-Prüfungen muss ggf. angepasst werden.