代码之家  ›  专栏  ›  技术社区  ›  Itay Moav -Malimovka

在Zend框架工作中使用mysql_unbuffered_查询,是否支持?

  •  3
  • Itay Moav -Malimovka  · 技术社区  · 15 年前

    我需要运行一个查询来检索大量的记录。
    这意味着我不能为mysqli使用zf包装器,它在引擎盖下面使用mysqli存储结果。 那么,zf中是否有一个包装器用于使用mysqli mysqli use result link text ,它将返回一个迭代器/记录集/资源,而不是已将所有结果加载到内存中的数组,或者我需要自己实现它吗?

    1 回复  |  直到 11 年前
        1
  •  5
  •   Bill Karwin    11 年前

    首先,没有Zend框架数据库适配器利用 ext/mysql . 有适配器 ext/mysqli ext/pdo_mysql .

    在mysqli适配器中,它总是调用 mysqli_store_result() (参见zend/db/statement/mysqli.php,靠近第250行),这意味着它只支持 缓冲的 查询结果。Zend框架目前不支持任何更改此内容的选项,因此您可以尝试自己编辑要使用的代码行。 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的内存限制。因此,您必须开始一个查询并编写一个循环来一次提取一行。