pg_fetch_result

(PHP 4 >= 4.2.0, PHP 5, PHP 7, PHP 8)

pg_fetch_result从结果实例中返回值

描述

pg_fetch_result(PgSql\Result $result, string|false|null $row, mixed $field): string|false|null
pg_fetch_result(PgSql\Result $result, mixed $field): string|false|null

pg_fetch_result() 返回 PgSql\Result 实例中特定行和字段(列)的值。

注意:

此函数以前称为 pg_result()

参数

result

一个 PgSql\Result 实例,由 pg_query()pg_query_params()pg_execute()(以及其他函数)返回。

row

要获取的结果集中的行号。行从 0 开始编号。如果省略,将获取下一行。

field

表示要获取的字段(列)名称的 string,否则表示要获取的字段编号的 int。字段从 0 开始编号。

返回值

布尔值作为 "t" 或 "f" 返回。所有其他类型,包括数组,都作为字符串返回,以与您在 psql 程序中看到相同的默认 PostgreSQL 方式进行格式化。数据库 NULL 值作为 null 返回。

如果 row 超出结果集中的行数,或者出现任何其他错误,则返回 false

变更日志

版本 描述
8.3.0 row 现在可以为空。
8.1.0 现在,result 参数期望一个 PgSql\Result 实例;以前,期望一个 资源

示例

示例 #1 pg_fetch_result() 示例

<?php
$db
= pg_connect("dbname=users user=me") || die();

$res = pg_query($db, "SELECT 1 UNION ALL SELECT 2");

$val = pg_fetch_result($res, 1, 0);

echo
"第二行的第一个字段是: ", $val, "\n";
?>

上面的示例将输出

First field in the second row is: 2

参见

添加注释

用户贡献的注释 5 则注释

ElDiablo
5 年前
请注意,7.2.8 中已修复了一个非常旧的错误(#76548)。

以前,如果省略了 $row,pg_fetch_result 不会获取下一行。
现在情况已得到解决,因此您代码中对该函数的错误使用可能会导致一些错误。
newby_AT_nobletec_DOT_com
21 年前
关于布尔字段的注释

如果您从 PostgreSQL 数据库中检索布尔值,请注意,返回的值将是字符 't' 或字符 'f',而不是整数。因此,语句

if (pg_fetch_result($rsRecords,0,'blnTrueFalseField')) {
echo "TRUE";
} else {
echo "FALSE";
}

将在这两种情况下(存储在字段中的 True 或 False)回显 "TRUE"。为了按预期工作,请改用以下方法

if (pg_fetch_result($rsRecords,0,'blnTrueFalseField') == 't') {
echo "TRUE";
} else {
echo "FALSE";
}
Alan U. Kennington
17 年前
参见错误#33809 http://bugs.php.net/bug.php?id=33809
这究竟是错误还是功能尚不清楚。
但是,最好始终将您的列名称放在额外的引号中。

$res = pg_query(...);
$colname = pg_field_name($res, $j);
pg_fetch_result($res, $i, "\"$colname\"");
Alan U Kennington
17 年前
为了在 pg_fetch_result 列名称中使用大写字母,显然需要包含显式引号。

因此,当我执行类似以下操作时

$res = pg_query(...);
$ncols = pg_num_fields($res);
for ($j = 0; $j < $ncols; ++$j) {
$colname[$j] = pg_field_name($res, $j);
$name = htmlspecialchars($colname[$j]);
print("列 $j 名称 = \"$name\"\n");
$value = htmlspecialchars(pg_fetch_result($res, 0, $colname[$j]));
print("列 \"{$colname[$j]}\" 值 = \"$value\"\n");
}

我得到类似以下内容

[....]
警告:pg_fetch_result() [function.pg-fetch-result]:在 /.../view.php 第 247 行指定了错误的列偏移量
列 8 名称 = "VEC 索引"
列 "VEC 索引" 值 = ""

但是,如果我将 $value 行更改为以下内容

$value = htmlspecialchars(pg_fetch_result($res, 0, "\"$colname[$j]\""));

我得到以下内容

[...]
列 8 名称 = "VEC 索引"
列 "VEC 索引" 值[0] = "47"

我认为,pg_fetch_result(...) 应该使用已有的引号。换句话说,这可能是 PHP postgres 库中的一个错误。它似乎不是 pg_fetch_result() 的一个已记录的功能,尽管 postgresql 手册在 "SQL 语法"、"词法结构" 下记录了它。

PHP 版本 5.1.4。
psql 版本 8.1.4。
Akbar
19 年前
在获取存储过程返回的值(例如此示例中的 smallint)时可以使用 pg_fetch_result

<?php
$pgConnection
= pg_connect("dbname=users user=me");

$userNameToCheckFor = "metal";

$result = pg_query($pgConnection, "SELECT howManyUsersHaveThisName('$userNameToCheckFor')");

$count = pg_fetch_result($result, 0, 'howManyUsersHaveThisName');

?>
To Top