©
This document uses PHP Chinese website manual Release
(PHP 4 >= 4.2.0, PHP 5)
pg_field_name — 返回字段的名字
$result
, int $field_number
) pg_field_name() 返回给定 PostgreSQL result
资源中的 field_number
所代表的字段名。字段编号从 0 开始。
Example #1 获取字段信息
<?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" ;
}
?>
上例的输出如下:
column 0 fieldname: author printed length: 6 characters storage length: -1 bytes field type: varcharcolumn 1 fieldname: year printed length: 4 characters storage length: 2 bytes field type: int2column 2 fieldname: title printed length: 24 characters storage length: -1 bytes field type: varchar
Note:
本函数以前的名字为 pg_fieldname()。
参见 pg_field_num() 。
[#1] [2004-08-12 10:01:21]
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)
[#2] ccasal at compuserve dot com [2001-01-12 11:51:42]
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"