请注意,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 现在可以为空。 |
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
请注意,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 索引"
列 "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。
在获取存储过程返回的值(例如此示例中的 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');
?>