PHP Conference Japan 2024

pg_fetch_result

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

pg_fetch_result從結果實例傳回值

說明

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

pg_fetch_result() 會從 PgSql\Result 實例中返回特定列與欄位(column)的值。

注意事項:

這個函式以前被稱為 pg_result()

參數

result

一個 PgSql\Result 實例,由 pg_query()pg_query_params()pg_execute()(以及其他函式)返回。

row

要擷取的結果集中列的編號。列從 0 開始編號。如果省略,則擷取下一列。

field

一個表示要擷取的欄位(column)名稱的 字串,或者一個表示要擷取的欄位編號的 整數。欄位從 0 開始編號。

返回值

布林值以 "t" 或 "f" 返回。所有其他類型,包括陣列,都以與您在 psql 程式中看到的相同的預設 PostgreSQL 格式格式化的字串返回。資料庫 NULL 值會以 null 返回。

如果 row 超過集合中的列數,或發生任何其他錯誤,則返回 false

更新日誌

版本 說明
8.3.0 row 現在可以為 null。
8.1.0 result 參數現在需要一個 PgSql\Result 實例;以前需要的是一個 資源

範例

範例 #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

參見

新增筆記

使用者貢獻的筆記 5 則筆記

ElDiablo
6 年前
請注意,一個非常舊的錯誤 (#76548) 已在 7.2.8 中修復。

以前,如果省略 $row,pg_fetch_result 不會擷取下一行。
現在情況已經改善,因此錯誤使用該函數可能會導致程式碼中出現一些錯誤。
newby_AT_nobletec_DOT_com
22 年前
關於布林欄位的註解

如果您從 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
18 年前
參見錯誤 #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
18 年前
為了在 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 函式庫中的錯誤。它似乎不是 pg_fetch_result() 的文件化功能,儘管 postgresql 手冊在「SQL 語法」、「詞彙結構」下有記錄它。

PHP 版本 5.1.4。
psql 版本 8.1.4。
Akbar
20 年前
當您取得儲存程序返回的值(例如本例中的 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