pg_field_table

(PHP 5 >= 5.2.0, PHP 7, PHP 8)

pg_field_tabletables フィールドの名前あるいは oid を返す

説明

pg_field_table(resource $result, int $field_number, bool $oid_only = false): mixed

pg_field_table() は、フィールドが属するテーブルの名前か あるいは oid_onlytrue の場合にテーブルの oid を返します。

パラメータ

result

pg_query()pg_query_params() あるいは pg_execute() (その他も含む) から返された、PostgreSQL クエリ結果リソース。

field_number

0 から始まるフィールド番号。

oid_only

デフォルトでは、フィールドが属するテーブルの名前が返されます。 しかし oid_onlytrue に設定すると、 その代わりに oid が返されます。

返り値

成功した場合にフィールドのテーブル名あるいは oid、 あるいは失敗した場合に false を返します。

例1 フィールドについてのテーブル情報の取得

<?php
$dbconn 
pg_connect("dbname=publisher") or die("接続できません");

$res pg_query($dbconn"SELECT bar FROM foo");

echo 
pg_field_table($res0);
echo 
pg_field_table($res0true);

$res pg_query($dbconn"SELECT version()");
var_dump(pg_field_table($res0));
?>

上の例の出力は、 たとえば以下のようになります。

foo
14379580

bool(false)

注意

注意:

テーブル名を返すよりも oid を返すほうがずっと高速です。 なぜなら、テーブル名を取得するには、 データベースのシステムテーブルにクエリを発行しなければならないからです。

参考

add a note add a note

User Contributed Notes 2 notes

up
3
strata_ranger at hotmail dot com
14 years ago
pg_field_table is primarily useful for queries that involve joins between multiple tables, e.g:

<?php
$res
= pg_query("SELECT table1.foo, table2.bar FROM table1 JOIN table2");
echo
pg_field_table($res, 0); // Outputs 'table1'
echo pg_field_table($res, 1); // Outputs 'table2'
?>

However, be aware of a few easy 'gotchas':

1- If your query contains static values in its select-list, pg_field_table() will yield FALSE for those fields (because it was a static value, not one fetched from a table):

<?php
$res
= pg_query("SELECT 'foo', bar FROM table");
echo
pg_field_table($res, 0); // FALSE
echo pg_field_table($res, 1); // Outputs 'table'
?>

2- If you UNION two queries together from different tables, pg_field_table() will return FALSE for all fields:

<?php
$res
= pg_query("(Select foo, bar from table1) UNION (Select foo, bar from table2)");
echo
pg_field_table($res, 0); // FALSE
echo pg_field_table($res, 1); // FALSE
?>
up
1
giultar at gmail dot com
3 years ago
this function return an OID even if your field comes from a view or a select but return FALSE if your field comes from an UNION select
To Top