請注意,一個非常舊的錯誤 (#76548) 已在 7.2.8 中修復。
以前,如果省略 $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 實例;以前需要的是一個 資源。 |
範例 #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
請注意,一個非常舊的錯誤 (#76548) 已在 7.2.8 中修復。
以前,如果省略 $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 函式庫中的錯誤。它似乎不是 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');
?>