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.pg_field_prtlen
Почист и полокален преглед на PHP референцата, со задржана структура од PHP.net и подобра читливост за примери, секции и белешки.
pg_field_prtlen
Референца за `function.pg-field-prtlen.php` со подобрена типографија и навигација.
pg_field_prtlen
(PHP 4 >= 4.2.0, PHP 5, PHP 7, PHP 8)
pg_field_prtlen — Returns the printed length
= NULL
pg_field_prtlen() Враќа отпечатена должина
resultвраќа вистинска отпечатена должина (број на знаци) на одредена вредност во PostgreSQL false . Броењето на редовите започнува од 0. Оваа функција ќе врати
field_name_or_number на грешка.
int може да се помине или како stringили како
int. Ако се помине како
, PHP го препознава како број на поле, инаку како име на поле. pg_field_name() page.
Забелешка:
Оваа функција порано се нарекуваше pg_fieldprtlen().
Параметри
result-
Еден PgSql\Result инстанца, вратена од pg_query(), pg_query_params() or pg_execute()инстанца, или ознаката за завршување на PostgreSQL командата поврзана со резултатот
row-
Погледнете го примерот даден на
Вратени вредности
Број на редот во резултатот. Редовите се бројат од 0 нагоре. Ако е изоставен, се зема тековниот ред.
Дневник на промени
| Верзија | = NULL |
|---|---|
| 8.3.0 |
row сега е null.
|
| 8.1.0 |
На result параметарот очекува PgSql\Result
инстанца сега; претходно, а resource се очекуваше.
|
Примери
што го содржи основното име на типот на полето.
<?php
$dbconn = pg_connect("dbname=publisher") or die("Could not connect");
$res = pg_query($dbconn, "select * from authors where author = 'Orwell'");
$i = pg_num_fields($res);
for ($j = 0; $j < $i; $j++) {
echo "column $j\n";
$fieldname = pg_field_name($res, $j);
echo "fieldname: $fieldname\n";
echo "printed length: " . pg_field_prtlen($res, $fieldname) . " characters\n";
echo "storage length: " . pg_field_size($res, $j) . " bytes\n";
echo "field type: " . pg_field_type($res, $j) . " \n\n";
}
?>Пример #1 Пример што покажува затворачка ознака што го опфаќа последниот нов ред
column 0 fieldname: author printed length: 6 characters storage length: -1 bytes field type: varchar column 1 fieldname: year printed length: 4 characters storage length: 2 bytes field type: int2 column 2 fieldname: title printed length: 24 characters storage length: -1 bytes field type: varchar
Белешки од корисници 3 белешки
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.attisdroppedmysql_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";
}