pg_field_prtlen

(PHP 4 >= 4.2.0, PHP 5, PHP 7, PHP 8)

pg_field_prtlenLiefert die Länge des Feldes

Beschreibung

pg_field_prtlen(PgSql\Result $result, string|false|null $row, mixed $field_name_or_number): int
pg_field_prtlen(PgSql\Result $result, mixed $field_name_or_number): int

pg_field_prtlen() gibt die aktuelle Länge (Anzahl der Zeichen) eines bestimmten Wertes in einem PostgreSQL-result zurück. Die Feldnummerierung beginnt bei 0. Die Funktion gibt bei einem Fehler false zurück.

field_name_or_number kann als int oder als string übergeben werden. Ein int wird von PHP als Feldnummer interpretiert, ein string als Feldname.

Sehen Sie sich dazu das Beispiel bei pg_field_name() an.

Hinweis:

Diese Funktion ersetzt die Funktion pg_fieldprtlen().

Parameter-Liste

result

Eine PgSql\Result-Instanz, die von pg_query(), pg_query_params() oder pg_execute() (unter anderen) zurückgegeben wurde.

row

Die Nummer der Zeile im Abfrageergebnis. Die Nummerierung beginnt bei 0. Fehlt dieser Parameter, so wird jeweils die nächste Zeile geholt.

Rückgabewerte

Die Anzahl der Zeichen in dem Feld.

Changelog

Version Beschreibung
8.3.0 row ist nun nullable (akzeptiert den null-Wert).
8.1.0 Der Parameter result erwartet nun eine PgSql\Result-Instanz; vorher wurde eine Ressource erwartet.

Beispiele

Beispiel #1 Informationen über Spalten ermitteln

<?php
$dbconn
= pg_connect("dbname=publisher") or die("Verbindungsaufbau fehlgeschlagen");

$res = pg_query($dbconn, "select * from authors where author = 'Orwell'");
$i = pg_num_fields($res);
for (
$j = 0; $j < $i; $j++) {
echo
"Spalte $j\n";
$fieldname = pg_field_name($res, $j);
echo
"Spaltenname: $fieldname\n";
echo
"Anzahl Druckzeichen: " . pg_field_prtlen($res, $fieldname) . " characters\n";
echo
"Anzahl Bytes im speicher: " . pg_field_size($res, $j) . " bytes\n";
echo
"Spaltentyp: " . pg_field_type($res, $j) . " \n\n";
}
?>

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

Spalte 0
Spaltenname: author
Anzahl Druckzeichen: 6 characters
Anzahl Bytes im speicher: -1 bytes
Spaltentyp: varchar

Spalte 1
Spaltenname: year
Anzahl Druckzeichen: 4 characters
Anzahl Bytes im speicher: 2 bytes
Spaltentyp: int2

Spalte 2
Spaltenname: title
Anzahl Druckzeichen: 24 characters
Anzahl Bytes im speicher: -1 bytes
Spaltentyp: varchar

Siehe auch

  • pg_field_size() - Liefert die interne Größe des belegten Speichers für ein Feld

add a note add a note

User Contributed Notes 3 notes

up
1
gregm at gxsnmp dot org
17 years ago
If you update the query to this:

$s = "SELECT a.attname AS name, t.typname AS type, a.attlen AS size, a.atttypmod AS len, a.attstorage AS i
   FROM pg_attribute a , pg_class c, pg_type t
   WHERE c.relname = '$TABLE'
   AND a.attrelid = c.oid AND a.atttypid = t.oid and a.attnum > 0 and not a.attisdropped";

You get postgres to filter out the 'postgres' columns and get only your columns back.
up
0
djmaze@moocms
16 years ago
Or even easier to keep things simple on fetching

SELECT a.attname AS name, t.typname AS type, a.attstorage AS i,
    CASE WHEN a.attlen = -1 THEN a.atttypmod ELSE a.attlen END AS size
    FROM pg_attribute a , pg_class c, pg_type t
    WHERE c.relname = 'moo_members'
    AND a.attrelid = c.oid AND a.atttypid = t.oid and a.attnum > 0 and not a.attisdropped
up
0
r dot galovic at r-3 dot at
18 years ago
mysql_field_len () function and more for postgres ...

problems ...
* pg_field_prtlen ... gives the actual size of the field back (it shows the count of the content allready inside the field - not the possible max-len)
* pg_filed_size ... can't be used for varchar or bpchar fields

...but there is a way to get the real-max-length of a field in postgreSQL via the system tables:

//returns an array with infos of every field in the table (name, type, length, size)
function SQLConstructFieldsInfo($TABLE, $DBCON)
{
    $s="SELECT a.attname AS name, t.typname AS type, a.attlen AS size, a.atttypmod AS len, a.attstorage AS i
    FROM pg_attribute a , pg_class c, pg_type t
    WHERE c.relname = '$TABLE' 
    AND a.attrelid = c.oid AND a.atttypid = t.oid";
   
    if ($r = pg_query($DBCON,$s))
    {
        $i=0;
        while ($q = pg_fetch_assoc($r))
        {
               $a[$i]["type"]=$q["type"];
               $a[$i]["name"]=$q["name"];
               if($q["len"]<0 && $q["i"]!="x")
               {
                   // in case of digits if needed ... (+1 for negative values)
                   $a[$i]["len"]=(strlen(pow(2,($q["size"]*8)))+1);
               }
               else
               {
                   $a[$i]["len"]=$q["len"];
               }
               $a[$i]["size"]=$q["size"];
            $i++;           
        }
        return $a;
    }
    return null;
}

// usage
$DBCON=pg_connect("host=YOUR-HOST port=YOUR-PORT dbname=YOUR-DB user=YOUR-USER password=YOUR-PASS");
$TABLE="YOUR-TABLENAME";
$RET=SQLConstructFieldsInfo($TABLE, $DBCON);

$j = count($RET);
for ($i=0; $i < $j; $i++)
{
    echo "<br>$i name=".$RET[$i]["name"]." type=".$RET[$i]["type"]." length=".$RET[$i]["len"]." size=".$RET[$i]["size"]." bytes";
}
To Top