Start · Sprachen · PHP · Referenz · pg_parameter_status

pg_parameter_status

Funktion

Liefert den aktuellen Wert eines laufzeitrelevanten Serverparameters einer PostgreSQL-Verbindung.

seit PHP 5.0.0 Kategorie: db

Signatur

pg_parameter_status(PgSql\Connection|string $connection, string $param_name = ?): string|false

Beschreibung

pg_parameter_status() fragt den Wert eines benannten Laufzeitparameters vom PostgreSQL-Server ab. Diese Parameter werden beim Verbindungsaufbau vom Server gemeldet und bei Änderungen aktualisiert. Typische Anwendungsfälle sind das Ermitteln der Serverversion, der Zeichenkodierung oder des aktuellen Datums- und Zeitstempelformats.

Bekannte Parameter sind unter anderem: server_version, server_encoding, client_encoding, is_superuser, session_authorization, DateStyle, IntervalStyle, TimeZone, integer_datetimes und standard_conforming_strings. Der genaue Satz verfügbarer Parameter hängt von der PostgreSQL-Version ab.

Die Funktion kann entweder nur mit dem Parameternamen aufgerufen werden (dann wird die zuletzt geöffnete Verbindung verwendet) oder explizit mit einer PgSql\Connection-Instanz als erstem Argument. Die Zwei-Parameter-Variante ist empfohlen, wenn mehrere Verbindungen gleichzeitig verwaltet werden.

Ist der angefragte Parameter dem Server nicht bekannt, gibt die Funktion false zurück. Das Ergebnis spiegelt immer den zuletzt vom Server übermittelten Wert wider und erfordert keinen zusätzlichen Netzwerkaufruf.

Parameter

Name Typ Default Beschreibung
$connection PgSql\Connection|string Eine aktive PostgreSQL-Verbindungsinstanz (PgSql\Connection). Wird dieser Parameter weggelassen, wird die zuletzt mit pg_connect() geöffnete Verbindung verwendet. In PHP < 8.1 war dies eine Ressource vom Typ resource. Ab PHP 8.1 wird eine PgSql\Connection-Instanz erwartet.
$param_name Pflicht string Der Name des abzufragenden Serverparameters, z. B. server_version, client_encoding oder TimeZone. Groß-/Kleinschreibung wird beachtet.

Rückgabewert

Typ
string|false
Beschreibung
Gibt den aktuellen Wert des Parameters als Zeichenkette zurück. Ist der Parameter dem Server unbekannt, wird false zurückgegeben.

Beispiele

Serverversion und Zeichenkodierung ermitteln

<?php
$conn = pg_connect('host=localhost dbname=testdb user=postgres password=secret');

if (!$conn) {
    die('Verbindung fehlgeschlagen');
}

$version  = pg_parameter_status($conn, 'server_version');
$encoding = pg_parameter_status($conn, 'client_encoding');
$timezone = pg_parameter_status($conn, 'TimeZone');

echo "PostgreSQL-Version : " . $version  . PHP_EOL;
echo "Client-Kodierung   : " . $encoding . PHP_EOL;
echo "Zeitzone           : " . $timezone . PHP_EOL;

pg_close($conn);
PostgreSQL-Version : 15.3 Client-Kodierung : UTF8 Zeitzone : Europe/Berlin

Prüfen ob standard_conforming_strings aktiviert ist

<?php
$conn = pg_connect('host=localhost dbname=testdb user=postgres password=secret');

if (!$conn) {
    die('Verbindung fehlgeschlagen');
}

$scs = pg_parameter_status($conn, 'standard_conforming_strings');

if ($scs === false) {
    echo "Parameter nicht verfügbar (ältere PostgreSQL-Version?)" . PHP_EOL;
} elseif ($scs === 'on') {
    echo "standard_conforming_strings ist aktiv – Backslash wird als normales Zeichen behandelt." . PHP_EOL;
} else {
    echo "standard_conforming_strings ist NICHT aktiv – Escape-Verhalten beachten!" . PHP_EOL;
}

pg_close($conn);
standard_conforming_strings ist aktiv – Backslash wird als normales Zeichen behandelt.

// Wichtig · Fallstricke

Sicherheitshinweis: Der Wert von standard_conforming_strings beeinflusst, wie PostgreSQL Backslashes in Zeichenketten interpretiert. Ist dieser Parameter deaktiviert (off), kann das bei naiver String-Verarbeitung zu SQL-Injection-Risiken führen. Prüfe diesen Parameter daher beim Verbindungsaufbau, wenn du dynamische Abfragen baust – oder nutze ausschließlich vorbereitete Anweisungen (pg_prepare() / pg_execute()).

Ab PHP 8.1 liefert pg_connect() kein resource mehr, sondern ein Objekt vom Typ PgSql\Connection. Code, der auf dem alten Ressource-Typ beruht, muss entsprechend angepasst werden.

Die zurückgegebenen Werte werden intern gecacht und erfordern keinen Round-Trip zur Datenbank. Nach einem SET-Befehl in einer Sitzung aktualisiert PostgreSQL den Wert automatisch via Protokoll.