PHP';s pg_fetch_assoc()是否使用迭代器/游标?
PHP在内部运行吗 使用迭代器/游标,还是在网络上一次获取所有数据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
\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) {}