PHP Doku:: Gibt die Länge des Feldes zurück - function.pg-field-prtlen.html

Verlauf / Chronik / History: (2) anzeigen

Sie sind hier:
Doku-StartseitePHP-HandbuchFunktionsreferenzDatenbankerweiterungenAnbieterspezifische DatenbankerweiterungenPostgreSQLPostgreSQL-Funktionenpg_field_prtlen

Ein Service von Reinhard Neidl - Webprogrammierung.

PostgreSQL-Funktionen

<<pg_field_num

pg_field_size>>

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 -1 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


3 BenutzerBeiträge:
- Beiträge aktualisieren...
djmaze@moocms
25.08.2007 14:01
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
gregm at gxsnmp dot org
12.02.2007 17:11
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.
r dot galovic at r-3 dot at
18.04.2005 22:54
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";
}



PHP Powered Diese Seite bei php.net
The PHP manual text and comments are covered by the Creative Commons Attribution 3.0 License © the PHP Documentation Group - Impressum - mail("TO:Reinhard Neidl",...)