请注意,7.2.8 中已修复了一个非常旧的错误(#76548)。
以前,如果省略了 $row,pg_fetch_result 不会获取下一行。
现在情况已得到改善,因此函数的错误使用现在可能会导致代码中出现一些错误。
(PHP 4 >= 4.2.0, PHP 5, PHP 7, PHP 8)
pg_fetch_result — 从结果实例中返回值
result
一个 PgSql\Result 实例,由 pg_query()、pg_query_params() 或 pg_execute()(以及其他函数)返回。
row
结果集中要获取的行号。行号从 0 开始。如果省略,则获取下一行。
field
布尔值返回为“t”或“f”。所有其他类型,包括数组,都返回为字符串,格式与您在 psql 程序中看到的默认 PostgreSQL 格式相同。数据库 NULL
值返回为 null
。
如果 row
超过集合中的行数,或发生任何其他错误,则返回 false
。
版本 | 描述 |
---|---|
8.3.0 |
row 现在可以为 null。 |
8.1.0 | result 参数现在期望一个 PgSql\Result 实例;以前,期望的是一个 resource。 |
示例 #1 pg_fetch_result() 示例
<?php
$db = pg_connect("dbname=users user=me");
$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
请注意,7.2.8 中已修复了一个非常旧的错误(#76548)。
以前,如果省略了 $row,pg_fetch_result 不会获取下一行。
现在情况已得到改善,因此函数的错误使用现在可能会导致代码中出现一些错误。
关于布尔字段的注释
如果从 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";
}
参见错误 #33809 http://bugs.php.net/bug.php?id=33809
这到底是错误还是特性尚不清楚。
但是,最好始终将列名称放在额外的引号中。
$res = pg_query(...);
$colname = pg_field_name($res, $j);
pg_fetch_result($res, $i, "\"$colname\"");
为了在 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 index"
列 "VEC index" 值 = ""
但是,如果我将 $value 行更改为以下内容
$value = htmlspecialchars(pg_fetch_result($res, 0, "\"$colname[$j]\""));
我得到以下结果
[...]
列 8 名称 = "VEC index"
列 "VEC index" 值[0] = "47"
我认为,pg_fetch_result(...) 应该使用现有的引号。换句话说,这可能是 PHP postgres 库中的错误。虽然 postgresql 手册在“SQL 语法”、“词法结构”下对此进行了说明,但这似乎不是 pg_fetch_result() 的已记录功能。
PHP 版本 5.1.4。
psql 版本 8.1.4。
在获取存储过程返回的值(例如此示例中的 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');
?>