Использование mysql_unbuffered_query в Zend Frame Work, это поддерживается? - PullRequest
3 голосов
/ 19 февраля 2009

Мне нужно выполнить запрос, который будет получать огромное количество записей.
Это означает, что я не могу использовать оболочки ZF для mysqli, которая глубоко под капотом использует mysqli-store-result. Итак, есть ли в ZF оболочка для использования mysqli mysqli-use-result текст ссылки , которая будет возвращать Iterator / record-set / resource, а не массив со всеми результатами, уже загруженными в память Или мне нужно самому это реализовать?

1 Ответ

5 голосов
/ 19 февраля 2009

Прежде всего, ни один адаптер базы данных Zend Framework не использует ext / mysql . Существуют адаптеры для ext / mysqli и ext / pdo_mysql .

В адаптере MySQLi он всегда вызывает mysqli_store_result() (см. Zend / Db / Statement / Mysqli.php, около строки 250), что означает, что он поддерживает только буферизованный запрос Результаты. Zend Framework в настоящее время не поддерживает какие-либо опции, чтобы изменить это, поэтому вы можете попробовать отредактировать эту строку кода самостоятельно, используя mysqli_use_result().

edit: В адаптере PDO_MySQL по умолчанию используется буферизованных запросов.

Исходный код PHP 5.4.6, файл ext / pdo_mysql / mysql_driver.c, строка 590, в функции pdo_mysql_handle_factory ():

H->buffered = H->emulate_prepare = 1;

Обратите внимание, что независимо от использования небуферизованных запросов, если вы вызовете fetchAll() для класса-обертки базы данных, вы получите все строки вашего огромного набора результатов и, вероятно, превысите лимит памяти PHP. Поэтому вместо этого вы должны начать запрос и написать цикл для выборки строк по одной за раз.

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