PHP Conference Japan 2024

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- 如果您的查询在其 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- 如果您将来自不同表的两个查询联合在一起,则 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