在CakePHP&中返回了很多行MySQL的

时间:2012-08-23 15:58:27

标签: php mysql cakephp cakephp-1.3

也许我在这里错过了一些简单的东西......或许我刚刚编写了这么长时间我无法看到我的问题,但是使用CakePHP(1.3)和做一个选择(MySQL)应该是能够返回结果,即使有2000条记录......对吗?

$options = array(
    'conditions' => array(
        'Lead.campaign_id' => $campaign['Campaign']['id']
    ),
    'recursive' => -1,
    'order' => 'Lead.goal DESC',
    'contain' => false,
);

$leads = $this->Lead->find('all',$options);

然而,这个查询给了我一个白色的死亡屏幕(设置define('LOG_ERROR', 2);)。

如果我向'limit' => 300,数组添加$options(或类似的数字......不一定要精确到300)那么它会提取结果,所以我知道查询本身不是问题

此外,我尝试使用'fields'数组中的$options参数来限制返回的列...甚至告诉它只返回1个字段,但这也不起作用。

我也通过

回应了它使用的SQL语句
$log = $this->Lead->getDataSource()->getLog(false, false);
debug($log);

当然,我必须将'limit'放入其中才能显示出来(否则我只会看到死亡的白屏)。然后我将该查询(没有限制)复制/粘贴到phpMyAdmin中,它返回记录就好了(即使打开'显示我1000行')。这样做会让我相信系统可以处理查询&输出,但也许我假设我不应该。

我试图获取所有行而不对记录进行分页的原因是因为我需要将它们输出到csv文件以供用户下载(这部分已经正常工作...... 何时查询有效。)

有人告诉我,这可能是一个超时问题,我应该提出这个问题,但这对我来说似乎是一个黑客攻击,必须有一个更好的解决方案。

由于我正在下载csv文件,或许有一种方法可以将查询流式传输到一个文件然后下载?或者甚至可能有更好的解决方案?

1 个答案:

答案 0 :(得分:2)

你可能内存不足(检查你的web服务器错误日志) - Cake会将所有2000行加载到一个数组中,这可能会超出你的脚本内存限制。

您可以提高脚本内存限制,但还有其他选项:

你真的需要取回所有2000行吗?向用户显示那么多数据对于用户来说是不可理解的。分页在这里会更好吗?

如果您打算根据所有数据进行计算,也许您可​​以重新编写查询以在查询中进行计算?

如果必须使用PHP来处理数据,请将其以块的形式提取回来(一次说100条记录)。如果进程可能需要很长时间,您可能需要将脚本超时设置为高值...