2024 日本 PHP 研討會

pg_field_table

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

pg_field_table返回欄位所屬資料表的名稱或 oid

說明

pg_field_table(PgSql\Result $result, int $field, bool $oid_only = false): string|int|false

pg_field_table() 會傳回欄位所屬的表格名稱,如果 oid_onlytrue 則傳回表格的 oid。

參數

result

一個 PgSql\Result 實例,由 pg_query()pg_query_params()pg_execute()(以及其他函數)所返回。

field

欄位編號,從 0 開始。

oid_only

預設會傳回欄位所屬的表格名稱,但如果將 oid_only 設為 true,則會改為傳回 oid。

傳回值

成功時傳回欄位的表格名稱或 oid,失敗時傳回 false

更新日誌

版本 說明
8.1.0 result 參數現在需要一個 PgSql\Result 實例;先前需要的是資源

範例

範例 #1 取得欄位的表格資訊

<?php
$dbconn
= pg_connect("dbname=publisher") or die("無法連線");

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

echo
pg_field_table($res, 0);
echo
pg_field_table($res, 0, true);

$res = pg_query($dbconn, "SELECT version()");
var_dump(pg_field_table($res, 0));
?>

上述範例將輸出類似以下的內容

foo
14379580

bool(false)

注意事項

注意:

傳回 oid 比傳回表格名稱快得多,因為擷取表格名稱需要查詢資料庫系統表格。

另請參閱

新增註釋

使用者貢獻的註釋 2 則註釋

strata_ranger at hotmail dot com
15 年前
pg_field_table 主要用於涉及多個表格之間聯結的查詢,例如:

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

然而,請注意一些容易遇到的「陷阱」

1- 如果您的查詢在其選擇列表中包含靜態值,pg_field_table() 將為這些欄位產生 FALSE(因為它是靜態值,而不是從表格擷取的值)

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

2- 如果您將來自不同表格的兩個查詢使用 UNION 合併在一起,pg_field_table() 將為所有欄位傳回 FALSE

<?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
?>
giultar at gmail dot com
4 年前
即使您的欄位來自視圖或選擇查詢,此函式也會傳回 OID,但如果您的欄位來自 UNION 選擇查詢,則會傳回 FALSE。
To Top