我需要运行一个查询,它将检索大量记录。
这意味着我不能对mysqli使用ZF包装器,因为它在内部使用mysqli-store-result。那么,在ZF中是否有一个包装器来使用mysqli mysqli-use- link text,它将返回一个迭代器/记录集/资源,而不是已经将所有结果加载到内存中的数组,或者我需要自己实现它?
发布于 2009-02-19 18:52:59
首先,没有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内存限制。因此,您必须开始一个查询并编写一个循环来一次提取一行。
https://stackoverflow.com/questions/566578
复制相似问题