PHP 5.4.31 Released

pg_field_prtlen

(PHP 4 >= 4.2.0, PHP 5)

pg_field_prtlenGibt die Länge des Feldes zurück

Beschreibung

int pg_field_prtlen ( resource $result , int $row_number , mixed $field_name_or_number )
int pg_field_prtlen ( resource $result , mixed $field_name_or_number )

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 liefert bei einem Fehler FALSE zurück.

field_name_or_number kann als integer oder als string übergeben werden. Ein integer 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

PostgreSQL Verbindungskennung, die (unter anderem) von den Funktionen pg_query(), pg_query_params() oder pg_execute() 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 oder FALSE, falls ein Fehler auftrat.

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

add a note add a note

User Contributed Notes 3 notes

up
1
gregm at gxsnmp dot org
7 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
6 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
9 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