pg_fetch_row
(PHP 4, PHP 5, PHP 7, PHP 8)
pg_fetch_row — 数値添字の配列として行を得る
説明
pg_fetch_row() は、
指定した result
インスタンスが指す結果から 1 行分のデータを取得します。
注意: この関数は、 NULL フィールドに PHPの
null
値を設定します。
パラメータ
result
-
pg_query()、pg_query_params() や (様々な関数がありますが、特に) pg_execute() が返した PgSql\Result クラスのインスタンス。
row
-
取得する行番号。最初の行は 0 です。省略したり
null
を指定したりした場合は、 次の行を取得します。 mode
-
返される配列のインデックスを制御するオプションの引数です。
mode
は定数で、以下の値を取ることができます。:PGSQL_ASSOC
,PGSQL_NUM
,PGSQL_BOTH
。PGSQL_NUM
を使うと、配列のインデックスを数値にした配列を返します。PGSQL_ASSOC
を使うと、連想配列のインデックスを返します。PGSQL_BOTH
を指定すると、数値と連想配列のインデックスを両方含めた形で配列を返します。
戻り値
個々の値を文字列として格納した配列を返します。配列の添字は 0 から
始まります。データベースの NULL
値は null
として返します。
row
が結果の行数より大きい場合・行が存在しない場合
、そしてそれ以外のエラーが発生した場合は false
を返します。
変更履歴
バージョン | 説明 |
---|---|
8.1.0 |
result は、PgSql\Result
クラスのインスタンスを期待するようになりました。
これより前のバージョンでは、リソース を期待していました。
|
例
例1 pg_fetch_row() の例
<?php
$conn = pg_pconnect("dbname=publisher");
if (!$conn) {
echo "An error occurred.\n";
exit;
}
$result = pg_query($conn, "SELECT author, email FROM authors");
if (!$result) {
echo "An error occurred.\n";
exit;
}
while ($row = pg_fetch_row($result)) {
echo "Author: $row[0] E-mail: $row[1]";
echo "<br />\n";
}
?>
参考
- pg_query() - クエリを実行する
- pg_fetch_array() - 行を配列として取得する
- pg_fetch_object() - 行をオブジェクトとして得る
- pg_fetch_result() - 結果インスタンスから値を返す
+add a note
User Contributed Notes 5 notes
post at zeller-johannes dot de ¶
19 years ago
I wondered whether array values of PostgreSQL are converted to PHP arrays by this functions. This is not the case, they are stored in the returned array as a string in the form "{value1 delimiter value2 delimiter value3}" (See http://www.postgresql.org/docs/8.0/interactive/arrays.html#AEN5389).
pletiplot at seznam dot cz ¶
18 years ago
Note, that when you retrieve some PG boolean value, you get 't' or 'f' characters which are not compatible with PHP bool.
eddie at eddiemonge dot com ¶
15 years ago
pg_fetch_row is faster than pg_fetch_assoc when doing a query with * as the select parameter. Otherwise, with declared columns, the two are similar in speed.
darw75 at swbell dot net ¶
23 years ago
a way to do this with 2 loops to insert data into a table...
$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>";
}
Matthew Wheeler ¶
21 years ago
Note that the internal row counter is incremented BEFORE the row is retrieved. This causes an off by one error if you try to do:
pg_result_seek($resid,0);
pg_fetch_row($resid);
you will get back the SECOND result not the FIRST.