Использует ли PHP pg_fetch_asso c () Итератор / Курсор? - PullRequest
1 голос
/ 21 января 2020

Использует ли PHP функция pg_fetch_assoc() внутренне

Итератор / Курсор или получает все данные сразу, по сети?

Будет ли \PDO использовать Курсор?

Мой контекст извлекает большой объем данных, и я хочу знать, будет ли он извлекаться как целое или строка за строкой (или ограничивать строки за строкой, когда курсор содержит подмножество полного набора данных).

Ответы [ 2 ]

2 голосов
/ 22 января 2020

pg_fetch_assoc() не делает ни того, ни другого. Это функция, которая выбирает ассоциативный массив из ресурса PHP. Ресурс может быть, например, результатом вызова PQexecPrepared.

На уровне API PHP -pg sql не имеет функций курсора. Вы можете попробовать использовать PDO, который эмулирует курсоры для PostgreSQL, если вы включаете режим прокручиваемого курсора. См. prepare() для получения более подробной информации. Другая альтернатива - просто использовать операторы курсора SQL самостоятельно.

Этот ответ объясняет немного больше: php postgres от запроса к извлечению строк в теории

Вот ссылка на исходный код PDO , который отвечает за эмуляцию курсоров с помощью операторов SQL.

0 голосов
/ 21 января 2020

Данные передаются через $ result:

(взято из открываемого файла pgsql.php (CTRL + Click для имени функции в PHPStorm)):

/**
 * 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) {}

Строки в $result - нумерованный массив / объект, содержащий все данные, которые он имеет. Он просто возвращает строку в этом массиве / объекте, поэтому имеет дело с любыми данными в переданном курсоре. Мы можем получить это из одной из строк приведенного выше кода (отформатирован для лучшего чтения):

@ param resource $ result PostgreSQL ресурс результата запроса, возвращаемый pg_query, pg_query_params или pg_execute

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...