PHP';s pg_fetch_assoc()是否使用迭代器/游标?

PHP';s pg_fetch_assoc()是否使用迭代器/游标?,php,postgresql,pdo,iterator,php-pgsql,Php,Postgresql,Pdo,Iterator,Php Pgsql,PHP在内部运行吗 使用迭代器/游标,还是在网络上一次获取所有数据 \PDO会使用光标吗 我的上下文正在获取大量数据,我想知道它是作为一个整体还是一行一行地被提取(或者当光标持有完整数据集的子集时,是一行一行地被限制)。数据是通过$result传递的: (取自打开的pgsql.php文件(CTRL+单击PHPStorm中函数名上的): /** *获取作为关联数组的行 *@linkhttps://php.net/manual/en/function.pg-fetch-assoc.php *@par

PHP在内部运行吗

使用迭代器/游标,还是在网络上一次获取所有数据

\PDO
会使用光标吗


我的上下文正在获取大量数据,我想知道它是作为一个整体还是一行一行地被提取(或者当光标持有完整数据集的子集时,是一行一行地被限制)。

数据是通过$result传递的:

(取自打开的
pgsql.php
文件(
CTRL+单击PHPStorm中函数名上的
):

/**
*获取作为关联数组的行
*@linkhttps://php.net/manual/en/function.pg-fetch-assoc.php
*@param资源$result
*PostgreSQL查询结果资源,由pg_查询返回,
*pg_查询参数或pg_执行
*(除其他外)。
*

*@param int$行[可选] *要获取的结果中的行号。行从0向上编号。如果 *如果省略或为NULL,则获取下一行。 *

*@return array关联索引的数组(按字段名)。 *数组中的每个值都表示为 *绳子。数据库空值 *值返回为NULL。 *

* *如果行超过数字,则返回FALSE *对于集合中的行,没有更多行,或出现任何其他错误。 *@自4.3 *@自5.0以来 */ 函数pg_fetch_assoc($result,$row=null){}
$result
中的行是一个编号的数组/对象,包含它所拥有的所有数据。它只返回该数组/对象中的行,因此它处理传递的游标中的任何数据。我们可以从上述代码中的一行中获得此信息(格式化以更好地阅读):

@参数资源$result
PostgreSQL查询结果资源,由
返回 pg_查询、pg_查询参数或pg_执行

pg\u fetch\u assoc()。它是一个从PHP资源获取关联数组的函数。例如,资源可以是调用的结果

在API级别上,PHP pgsql没有游标函数。您可以尝试使用PDO,如果启用可滚动游标模式,它将模拟PostgreSQL的游标。另一种选择是自己使用SQL游标语句

这个答案解释得更多一些:


这里有一个指向的链接,它负责用SQL语句模拟游标。

我的经验是,它一次获取所有内容,因为如果我接收到太多行,我会使用它收到内存分配错误。然而,MySQL和ORA版本的fetch_assoc从未给我内存分配错误。免责声明:自2009年以来,我从未使用过PG函数,因此现在函数的实现可能有所不同。re:您的编辑内存是在返回时分配的,还是在传递时分配的?@treyBake是从db服务器提取整个数据集,还是仅从游标中提取数据(我没有否决您的答案);(将措辞从“内存分配”改为“整体或部分提取数据”)@丹尼尔。我相信光标中的数据,因为我们将$result作为参数传递,而不是在函数中全部创建:)这是一个正确的答案,但我认为您遗漏了一点。阅读字里行间的内容,我认为OP想知道如何在PG api中使用光标模式。@Dharman啊,有时候我有点太过直白了哈哈:)我会等待OP的评论/回复,我会相应地修改(如果可以的话):)
/**
 * Fetch a row as an associative array
 * @link https://php.net/manual/en/function.pg-fetch-assoc.php
 * @param resource $result <p>
 * PostgreSQL query result resource, returned by <b>pg_query</b>,
 * <b>pg_query_params</b> or <b>pg_execute</b>
 * (among others).
 * </p>
 * @param int $row [optional] <p>
 * Row number in result to fetch. Rows are numbered from 0 upwards. If
 * omitted or <b>NULL</b>, the next row is fetched.
 * </p>
 * @return array An array indexed associatively (by field name).
 * Each value in the array is represented as a
 * string. Database NULL
 * values are returned as <b>NULL</b>.
 * </p>
 * <p>
 * <b>FALSE</b> is returned if <i>row</i> exceeds the number
 * of rows in the set, there are no more rows, or on any other error.
 * @since 4.3
 * @since 5.0
 */
function pg_fetch_assoc ($result, $row = null) {}