获取php中pgsql结果集的详细字段信息

时间:2012-07-05 18:40:26

标签: php postgresql

我一直在尝试从php中的Postgresql获取结果集中字段的完整元信息(类似于mysql_fetch_field(),它提供了大量有关字段定义的信息)。虽然我可以使用以下功能来查找一些信息:

$name = pg_field_name($result, 1);
$table = pg_field_table($result, 1);
$type = pg_field_type($result, 1);

我无法找到一种方法来获取有关字段是否允许空值,包含blob数据(按字段定义),是否为定义等的主要唯一键的更多详细信息.mysql_fetch_field()以某种方式提供所有这些信息,这非常有用。

我真的想要一些直接从php获取信息的方法,但如果不可能,那么也许有人创建了一个例程,可能能够以某种方式从pgsql结果集中提取该信息。

PS:这看起来很有希望,但页面上的警告不是一个好兆头: http://php.net/manual/en/pdostatement.getcolumnmeta.php

此外,我目前不使用PDO,但如果没有解决方案,那么PDo特定答案也足够了。

2 个答案:

答案 0 :(得分:3)

您可以使用以下查询找到您的元数据:

select * from information_schema.columns 
where table_name = 'regions' and column_name = 'capital'

这应该提供mysql_fetch_field中的所有信息。我不是一个php编码器,所以也许有人知道包装这个查询的函数。

答案 1 :(得分:2)

所有

惊讶地发现pgsql在PHP中没有列计数例程。我查找的帮助都得到了“information_schema.columns”的总计数,这不是你在逐个细胞处理时所需要的。

所以这里有几个快速的功能:

// Test Cell by Cell
echo "Testing Cell by Cell! <br>";
$sql   = "SELECT * FROM sometable;
$res   = pg_query($sql);
$r_cnt = pg_numrows($res) or die("Error: Row Count Failed!");
$c_cnt = pg_numcols($res) or die("Error: Col Count Failed!");
echo "C=> $c_cnt R=> $r_cnt <br>";
for ($n=1; $n<=$r_cnt; $n++) {
    for ($x=1; $x<=$c_cnt; $x++) {
       echo "Cell=> pg_result($res,$n,$x) <br>";
    }  // end while $x
}  // end while $n

function pg_numcols($res) {
    $spos   = strpos(strtoupper($this->db_sql),'SELECT')+6;
    $fpos   = strpos(strtoupper($this->db_sql),'FROM');
    $lenp   = $fpos - $spos;
    $t_str  = substr($this->db_sql,$spos,$lenp);
    $x_str  = explode(',',trim($t_str));
    $result = count($x_str);
    return $result;
}  // end function

希望你喜欢!