Start · Sprachen · PHP · Referenz · pg_field_prtlen

pg_field_prtlen

Funktion

Gibt die tatsächliche Drucklänge (Anzahl der Zeichen im String) eines Feldes in einem PostgreSQL-Ergebnissatz zurück.

seit PHP 4.2.0 Kategorie: db

Signatur

pg_field_prtlen(PgSql\Result $result, int $row, mixed $field): int

Beschreibung

pg_field_prtlen() ermittelt die tatsächliche Länge des gespeicherten Wertes eines bestimmten Felds in einer bestimmten Ergebniszeile. Diese Länge entspricht der Anzahl der Zeichen, wie sie in der Textdarstellung des Feldes erscheinen würden – also nicht die interne Binärlänge, sondern die sichtbare (druckbare) Länge des Strings.

Die Funktion ist nützlich, wenn man prüfen möchte, wie viel Platz ein Feldwert bei der Ausgabe einnimmt, beispielsweise beim Formatieren von tabellarischen Ausgaben im Terminal oder für Plausibilitätsprüfungen von Eingabedaten aus der Datenbank.

Das Feld kann entweder als numerischer Index (0-basiert) oder als Feldname (String) angegeben werden. Ist der Feldwert NULL, gibt die Funktion 0 zurück.

Im Unterschied zu pg_field_size(), die die maximale Felddefinitionsgröße aus dem Schema zurückgibt, liefert pg_field_prtlen() die tatsächliche Länge des konkreten Datensatzes in der angegebenen Zeile.

Parameter

Name Typ Default Beschreibung
$result Pflicht PgSql\Result Ein PostgreSQL-Ergebnisobjekt, das von Funktionen wie pg_query() oder pg_execute() zurückgegeben wurde.
$row Pflicht int Die 0-basierte Zeilennummer im Ergebnis, aus der der Feldwert gelesen werden soll.
$field Pflicht mixed Der 0-basierte numerische Feldindex (int) oder der Feldname (string), dessen Drucklänge ermittelt werden soll.

Rückgabewert

Typ
int
Beschreibung
Gibt die Anzahl der Zeichen in der textlichen Darstellung des Feldinhalts zurück. Ist der Wert des Feldes NULL, wird 0 zurückgegeben. Bei einem Fehler wird false zurückgegeben.

Beispiele

Drucklänge eines Feldes per Index ermitteln

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

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

for ($row = 0; $row < pg_num_rows($result); $row++) {
    $idLen   = pg_field_prtlen($result, $row, 0); // Spalte 'id'
    $nameLen = pg_field_prtlen($result, $row, 1); // Spalte 'name'
    echo "Zeile $row — ID-Länge: $idLen, Name-Länge: $nameLen\n";
}

pg_free_result($result);
pg_close($conn);
Zeile 0 — ID-Länge: 1, Name-Länge: 9 Zeile 1 — ID-Länge: 2, Name-Länge: 5 Zeile 2 — ID-Länge: 2, Name-Länge: 11

Drucklänge per Feldname ermitteln und tabellarisch ausgeben

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

$result = pg_query($conn, "SELECT vorname, nachname, email FROM kunden LIMIT 5");
if (!$result) {
    die('Abfrage fehlgeschlagen');
}

$fields = ['vorname', 'nachname', 'email'];
$numRows = pg_num_rows($result);

for ($row = 0; $row < $numRows; $row++) {
    foreach ($fields as $field) {
        $len = pg_field_prtlen($result, $row, $field);
        $val = pg_fetch_result($result, $row, $field);
        echo sprintf("%-12s %-30s (Länge: %d)\n", $field . ':', $val ?? 'NULL', $len);
    }
    echo str_repeat('-', 50) . "\n";
}

pg_free_result($result);
pg_close($conn);
vorname: Max (Länge: 3) nachname: Mustermann (Länge: 10) email: max.mustermann@example.com (Länge: 26) --------------------------------------------------

// Wichtig · Fallstricke

Achtung bei NULL-Werten: Enthält ein Feld den Datenbankwert NULL, gibt pg_field_prtlen() 0 zurück – identisch zum Verhalten bei einem leeren String. Verwende pg_field_is_null(), um zwischen NULL und einem tatsächlich leeren String zu unterscheiden.

Ab PHP 8.1 ist der Typ des Parameters result das Objekt PgSql\Result statt einer einfachen Ressource. Code, der ältere Ressource-Typen erwartet, muss entsprechend angepasst werden.

Die Funktion liefert die Textlänge der Felddarstellung. Bei numerischen Typen wie INTEGER oder FLOAT ist das die Länge der String-Repräsentation der Zahl, nicht die Byte-Länge des zugrunde liegenden Datentyps.