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("Could not connect");

$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 个注释

3
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- 如果您的查询在 select 列表中包含静态值,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
?>
1
giultar at gmail dot com
4 年前
此函数即使您的字段来自视图或 select 也返回一个 OID,但如果您的字段来自 UNION select 则返回 FALSE
To Top