Start · Sprachen · PHP · Referenz · pg_set_client_encoding

pg_set_client_encoding

Funktion

Setzt die Zeichenkodierung der Client-Verbindung für eine PostgreSQL-Verbindung.

seit PHP 4.0.3 Kategorie: db

Signatur

pg_set_client_encoding(PgSql\Connection $connection, string $encoding): int

Beschreibung

pg_set_client_encoding() legt die Zeichenkodierung fest, die der PostgreSQL-Client (also PHP) für die Kommunikation mit dem Datenbankserver verwendet. Damit wird sichergestellt, dass Strings korrekt zwischen PHP und PostgreSQL konvertiert werden, wenn Client und Server unterschiedliche Kodierungen nutzen.

Die Funktion ist besonders wichtig, wenn die PHP-Anwendung mit einer anderen Kodierung arbeitet als der PostgreSQL-Server. Typischerweise wird UTF8 als Kodierung gesetzt, um eine einheitliche Unicode-Verarbeitung zu gewährleisten. Sie entspricht dem SQL-Befehl SET CLIENT_ENCODING TO ....

Gültige Kodierungsnamen sind unter anderem UTF8, LATIN1, WIN1252 oder SQL_ASCII. Bei einer ungültigen Kodierung gibt die Funktion -1 zurück. Es empfiehlt sich, die Kodierung direkt nach dem Verbindungsaufbau zu setzen, bevor Daten gelesen oder geschrieben werden.

Parameter

Name Typ Default Beschreibung
$connection Pflicht PgSql\Connection Eine aktive PostgreSQL-Verbindungsinstanz, die von pg_connect() oder pg_pconnect() zurückgegeben wurde.
$encoding Pflicht string Der Name der gewünschten Client-Kodierung, z. B. UTF8, LATIN1, WIN1252 oder SQL_ASCII.

Rückgabewert

Typ
int
Beschreibung
Gibt 0 bei Erfolg zurück, oder -1 wenn die angegebene Kodierung ungültig oder ein Fehler aufgetreten ist.

Beispiele

Client-Kodierung auf UTF-8 setzen

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

$result = pg_set_client_encoding($conn, 'UTF8');
if ($result === 0) {
    echo 'Kodierung erfolgreich auf UTF8 gesetzt.';
} else {
    echo 'Fehler beim Setzen der Kodierung.';
}

// Aktuelle Kodierung auslesen
$encoding = pg_client_encoding($conn);
echo PHP_EOL . 'Aktuelle Kodierung: ' . $encoding;

pg_close($conn);
?>
Kodierung erfolgreich auf UTF8 gesetzt. Aktuelle Kodierung: UTF8

Ungültige Kodierung – Fehlerbehandlung

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

$result = pg_set_client_encoding($conn, 'UNGUELTIGE_KODIERUNG');
if ($result === -1) {
    echo 'Ungültige Kodierung angegeben. Bitte einen gültigen Kodierungsnamen verwenden.';
} else {
    echo 'Kodierung gesetzt.';
}

pg_close($conn);
?>
Ungültige Kodierung angegeben. Bitte einen gültigen Kodierungsnamen verwenden.

// Wichtig · Fallstricke

Sicherheitshinweis: Eine falsch gesetzte oder inkonsistente Zeichenkodierung kann dazu führen, dass Eingaben nicht korrekt escaped werden. Dies kann in Kombination mit multibyte-unsicheren Kodierungen wie LATIN1 oder SQL_ASCII unter Umständen zu SQL-Injection-Lücken führen, wenn Sonderzeichen nicht korrekt behandelt werden. Es wird daher dringend empfohlen, UTF8 konsistent auf Server- und Client-Seite zu verwenden.

Ab PHP 8.1 ist der erste Parameter vom Typ PgSql\Connection (statt dem früheren Resource-Typ). Die Funktion ist nicht zu verwechseln mit pg_client_encoding(), welche die aktuell gesetzte Kodierung lediglich ausliest.