【问题标题】:Error fetchAll(PDO::FETCH_ASSOC)错误 fetchAll(PDO::FETCH_ASSOC)
【发布时间】:2014-02-24 14:17:26
【问题描述】:

我正在实施 PDO 的研究产品并遇到以下问题: 当 sql 查询返回太多结果时,运行 fetchAll (PDO::FETCH_ASSOC) 后进程停止(白屏)。

-) 查询基本上是SELECT * FROM product WHERE ....(返回3000)

经过几次尝试将查询更改为:

-) SELECT id, name FROM product WHERE ....

再次进行所有情况下的研究工作。

只是为了澄清查询总是正确的,因为 execute() 方法返回 true。 products 表有大约 60 列,包括某种允许 HTML 内容的文本。

我对 PDO 没有太多经验,无法解决紧急问题,但想知道问题的原因。

怀疑:

此 PDO 是否有任何限制?也许 PHP 转换成数组?解决方法错误? 提前致谢,

【问题讨论】:

  • fetchAll() 从您的查询中提取所有记录并将所有记录一次全部转储到内存中我相信......现在,使用SELECT * ... 意味着您将每条记录拉出所有 60 列(并且在 SQL 服务器上的效率略低于提供列的名称,因为服务器必须首先找出它们是什么)。如果您只指定要返回的 2 列,那么您当然会向内存中转储很多更少的数据 - 很可能,当使用 SELECT * 时,PHP 已用完允许的可分配内存。

标签: php mysql sql pdo


【解决方案1】:
$STH = $DBH->query('SELECT field1,field2 from db'); 
setFetchMode(PDO::FETCH_ASSOC);

只需调用您需要的字段,以便快速执行。

如果使用SELECT * FROM.... 意味着它会获取所有列......因此执行查询需要更多时间。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-28
    相关资源
    最近更新 更多