我曾經想知道 PostgreSQL 的陣列值是否會被這些函式轉換為 PHP 陣列。實際上並非如此,它們是以字串形式儲存在返回的陣列中,格式為 "{value1 分隔符號 value2 分隔符號 value3}"(請參閱 https://postgresql.dev.org.tw/docs/8.0/interactive/arrays.html#AEN5389)。
(PHP 4, PHP 5, PHP 7, PHP 8)
pg_fetch_row — 取得以列舉陣列表示的資料列
result
一個 PgSql\Result 實例,由 pg_query()、pg_query_params() 或 pg_execute()(以及其他函式)返回。
row
要擷取的結果中的列號。列號從 0 開始。如果省略或為 null
,則會擷取下一列。
mode
一個可選參數,用於控制返回的 陣列 的索引方式。mode
是一個常數,可以採用下列值:PGSQL_ASSOC
、PGSQL_NUM
和 PGSQL_BOTH
。使用 PGSQL_NUM
,函式將返回一個帶有數字索引的陣列;使用 PGSQL_ASSOC
,它將只返回關聯索引;而 PGSQL_BOTH
將同時返回數字和關聯索引。
版本 | 說明 |
---|---|
8.1.0 | result 參數現在需要一個 PgSql\Result 實例;以前需要的是 資源。 |
範例 #1 pg_fetch_row() 範例
<?php
$conn = pg_pconnect("dbname=publisher");
if (!$conn) {
echo "發生錯誤。\n";
exit;
}
$result = pg_query($conn, "SELECT author, email FROM authors");
if (!$result) {
echo "發生錯誤。\n";
exit;
}
while ($row = pg_fetch_row($result)) {
echo "作者: $row[0] 電子郵件: $row[1]";
echo "<br />\n";
}
?>
我曾經想知道 PostgreSQL 的陣列值是否會被這些函式轉換為 PHP 陣列。實際上並非如此,它們是以字串形式儲存在返回的陣列中,格式為 "{value1 分隔符號 value2 分隔符號 value3}"(請參閱 https://postgresql.dev.org.tw/docs/8.0/interactive/arrays.html#AEN5389)。
當使用 * 作為 select 參數執行查詢時,pg_fetch_row 比 pg_fetch_assoc 更快。否則,使用宣告的欄位時,兩者的速度相似。
一種使用兩個迴圈將資料插入表格的方法...
$num = pg_numrows($result);
$col_num = pg_numfields($result);
for ($i=0; $i<$num; $i++) {
$line = pg_fetch_array($result, $i, PGSQL_ASSOC);
print "\t<tr bgcolor=#dddddd>\n";
for ($j=0; $j<$col_num; $j++){
list($col_name, $col_value) =each($line);
print "\t\t<TD ALIGN=RIGHT><FONT SIZE=1 FACE='Geneva'>$col_value</FONT></TD>\n";
}
echo "<br>";
}
請注意,內部列計數器會在擷取列 *之前* 遞增。如果您嘗試執行以下操作,這會導致差一錯誤:
pg_result_seek($resid,0);
pg_fetch_row($resid);
您將獲得第二個結果,而不是第一個。