获取所有记录会停止脚本

时间:2013-11-19 12:57:55

标签: php yii

我有一个php函数,可以记录我的数据库中表的所有记录。

当我的记录超过20'000时,此功能停止工作。

如果我执行$all = MyModel::model()->findAll();脚本失败,我不知道为什么。

但是限制$all = MyModel::model()->findAllBySql('select * from tableName limit 10000');一切正常。

如果我设定超过15'000(或多或少)的限制不再有效。

我不知道为什么会产生这个问题。 也许对于我存储记录的变量的内存使用情况? 数据库超时? (获取所有行不需要太长时间:3-4秒)

有人知道答案吗?有一个解决方法吗?

谢谢大家

2 个答案:

答案 0 :(得分:1)

我认为你来自PHP的memory_limit。您可以在apache日志文件中进行检查。在那里你可以看到像

这样的东西
Fatal error: Allowed memory size of *** bytes exhausted

我更愿意实现Iterator接口。然后,您可以逐步浏览数据,而无需将所有记录保存在一个变量中。

http://php.net/manual/de/class.iteratoraggregate.php
http://www.php.net/manual/de/class.iterator.php

答案 1 :(得分:0)

检查

https://stackoverflow.com/a/18679817/2600397

Willem Renzema建议使用CDataProviderIterator,因为这并不能保留记忆中的全套记录。