Signatur
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
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);
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);
// 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.