我很好奇 PostgreSQL 的数组值是否会由这些函数转换为 PHP 数组。事实并非如此,它们以 "{value1 delimiter value2 delimiter value3}" 的形式存储在返回的数组中(参见 https://postgresql.ac.cn/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
一个可选参数,控制返回的 array 的索引方式。mode
是一个常量,可以取以下值:PGSQL_ASSOC
、PGSQL_NUM
和 PGSQL_BOTH
。使用 PGSQL_NUM
,该函数将返回一个带有数字索引的数组;使用 PGSQL_ASSOC
,它将只返回关联索引;而 PGSQL_BOTH
将同时返回数字和关联索引。
一个 array,从 0 开始索引,每个值都表示为一个 string。数据库 NULL
值将返回为 null
。
如果 row
超过集合中的行数,没有更多行,或者在任何其他错误情况下,将返回 false
。
版本 | 描述 |
---|---|
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 delimiter value2 delimiter value3}" 的形式存储在返回的数组中(参见 https://postgresql.ac.cn/docs/8.0/interactive/arrays.html#AEN5389)。
当使用 * 作为 select 参数进行查询时,pg_fetch_row 比 pg_fetch_assoc 快。否则,对于声明的列,两者速度相似。
一种使用 2 个循环将数据插入表中的方法...
$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);
您将获得第二个结果,而不是第一个。
获取下级,并将它们放入数组中。
function get_downlines($my_code){
global $link;
$sql = "select user_id, name from tb_user where parentcode = $my_code";
$res = pg_query($link,$sql);
if(!$res){
echo "Error: ".$sql;exit();
}
$num_fields = pg_num_fields($res);
$info_rows = 0;
$num_rows = pg_num_rows($res);
while($arr = pg_fetch_row($res)){
$info_offset = 1;
$info_columns = 0;
while ($info_offset <= $num_fields) {
$info_elements[$info_rows][$info_columns] = $arr[$info_columns];
$info_offset++; $info_columns++;
}
$info_rows++;
}
return $info_elements;
}
我使用以下代码将查询结果分配给数组。
while ($row = pg_fetch_row($result)) $newArray[] = $row[0];
print_r($newArray);