1

私はphpのPostgresqlから結果セットのフィールドの完全なメタ情報を取得しようとしています(フィールド定義に関する多くの情報を提供するmysql_fetch_field()のようなもの)。私はいくつかの情報を見つけるために次の関数を使用することができますが:

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

フィールドがnull値を許可するか、blobデータを含む(フィールド定義による)か、定義によるプライマリの一意キーであるかなどについての詳細を取得する方法を見つけることができませんでした。mysql_fetch_field()は、このすべての情報を何らかの形で提供します。非常に便利。

phpから直接その情報を取得する方法が本当に必要ですが、それが不可能な場合は、誰かがpgsql結果セットからその情報を何らかの方法で抽出できる可能性のあるルーチンを作成した可能性があります。

PS:これは有望に見えますが、ページ上の警告は良い兆候ではありません:http: //php.net/manual/en/pdostatement.getcolumnmeta.php

また、私は現在PDOを使用していませんが、解決策がない場合は、PDo固有の回答でも十分です。

4

2 に答える 2

3

次のようなクエリを使用して、列のメタデータを見つけることができます。

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

これにより、mysql_fetch_fieldにあるすべての情報が提供されます。私はPHPコーダーではないので、おそらく誰かがこのクエリをラップする関数を知っています。

于 2012-07-06T06:55:55.583 に答える
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

楽しんでください!

于 2012-12-21T19:18:19.307 に答える