In fact you can extract the size of the varchar field, by simply sending the following query:
"select a.atttypmod,a.attrelid from pg_attribute as a, pg_class as c where c.relname='$table' AND a.attrelid=c.oid AND a.attname='$field'"
here is a simple function that does that:
function get_field_size($table, $field, $link) {
$result = pg_query($link, "select a.atttypmod,a.attrelid from pg_attribute as a, pg_class as c where c.relname='$table' AND a.attrelid=c.oid AND a.attname='$field'");
$data = pg_fetch_object($result);
return ($data->atttypmod - 4);
}
returned value is a size of a given field (also varchar)
pg_field_name
(PHP 4 >= 4.2.0, PHP 5)
pg_field_name — Zwraca nazwę kolumny
Opis
string pg_field_name
( resource $wynik
, int $numer_pola
)
pg_field_name() zwraca nazwę kolumny znajdującej się na pozycji numer_pola w identyfikatorze wyniku wynik PostgreSQL-a. Kolumny są numerowane od zera.
Informacja: Ta funkcja była poprzednio nazwana pg_fieldname().
Parametry
- wynik
-
Identyfikator wyniku zapytania PostgreSQL-a, zwrócony przez pg_query(), pg_query_params() lub pg_execute() (między innymi).
- numer_pola
-
Numer kolumny, rozpoczynając od zera.
Zwracane wartości
Nazwa kolumny, lub FALSE w razie błędu.
Przykłady
Example #1 Pobieranie informacji o kolumnach
<?php
$polaczenie = pg_connect("dbname=wydawca") or die("Nie można się połączyć");
$wyn = pg_query($polaczenie, "select * from autorzy where autor = 'Orwell'");
$i = pg_num_fields($wyn);
for ($j = 0; $j < $i; $j++) {
echo "kolumna $j\n";
$nazwa_pola = pg_field_name($wyn, $j);
echo "nazwa pola: $nazwa_pola\n";
echo "drukowalna długość: " . pg_field_prtlen($wyn, $nazwa_pola) . " znak(ów)\n";
echo "rzeczywista długość: " . pg_field_size($wyn, $j) . " bajt(ów)\n";
echo "typ pola: " . pg_field_type($wyn, $j) . " \n\n";
}
?>
Powyższy przykład wyświetli:
kolumna 0 nazwa pola: autor drukowalna długość: 6 znak(ów) rzeczywista długość: -1 bajt(ów) typ pola: varchar kolumna 1 nazwa pola: rok drukowalna długość: 4 znak(ów) rzeczywista długość: 2 bajt(ów) typ pola: int2 kolumna 2 nazwa pola: tytul drukowalna długość: 24 znak(ów) rzeczywista długość: -1 bajt(ów) typ pola: varchar
pg_field_name
12-Aug-2004 07:01
ccasal at compuserve dot com
12-Jan-2001 08:51
12-Jan-2001 08:51
The pg_fieldname function only returns the unqualified name from the select statement. example:
select c.name, con.name from customer c, contacts con where con.customer_id = c.id;
pg_fieldname will return "name" for both fields instead of c.name and con.name.
This is a PostgreSQL limitation, not a PHP limitation.
if you need different field names you should use :
select c.name as customer_name, con.name as contact_name from customer c, contacts con where con.customer_id = c.id;
then pg_fieldname will return "customer_name" and "contact_name"
