我需要运行一个查询,它将检索大量的记录.
这意味着我不能使用mysqli的ZF包装器,它深入引擎盖使用mysqli-store-result.那么,ZF中是否有一个使用mysqli mysqli-use-result 链接文本的包装器,该文本将返回Iterator/record-set/resource而不是已经将所有结果加载到内存中的数组,或者我是否需要自己实施吗?
首先,没有Zend Framework数据库适配器使用ext/mysql.有适用于ext/mysqli和ext/pdo_mysql的适配器.
在MySQLi适配器中,它总是调用mysqli_store_result()
(参见第250行附近的Zend/Db/Statement/Mysqli.php),这意味着它只支持缓冲的查询结果.Zend Framework目前不支持任何更改此选项的选项,因此您可以尝试自行编辑该行代码以供使用mysqli_use_result()
.
编辑:在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的内存限制.因此,您必须开始查询并编写循环以一次一个地获取行.