用户
 找回密码
 入住 CI 中国社区
搜索
查看: 3298|回复: 8
收起左侧

[版本 3.x] Memory limit of 10240 KB exceeded for buffered query

[复制链接]
发表于 2016-6-2 12:38:26 | 显示全部楼层 |阅读模式
本帖最后由 Closer 于 2016-6-2 13:36 编辑

$query=$this->db->query($sql);
大概4000条数据,就超过了缓冲限制,在不改变数据库的情况下,有没有什么其他方法
发表于 2016-6-2 13:38:06 | 显示全部楼层
修改 php.ini 中的記憶體使用上限
 楼主| 发表于 2016-6-2 13:51:22 | 显示全部楼层
不配置php.ini呢,还是其他方法吗?比如说还有什么函数可以避开缓冲的,例如mysql原生的unbuffered_query,那么在CI 下还有类似的方法吗?
发表于 2016-6-2 16:18:02 | 显示全部楼层
123jixinyu 发表于 2016-6-2 13:51
不配置php.ini呢,还是其他方法吗?比如说还有什么函数可以避开缓冲的,例如mysql原生的unbuffered_query, ...

與 CI 較無關係,單純只是資料量太大了
也許你可以考慮增加搜尋條件,或善用 select
不然就是一次只拿 1000 筆資料,用 foreach 去紀錄拿到的資料
這樣佔的就是 PHP 的記憶體

 
 楼主| 发表于 2016-6-2 18:03:23 | 显示全部楼层
Closer 发表于 2016-6-2 16:18
與 CI 較無關係,單純只是資料量太大了
也許你可以考慮增加搜尋條件,或善用 select
不然就是一次只拿 100 ...

这种想法我也想过,但是首先需要获取查询结果数量,才能分批查询。怎么直接获取查询结果数量(需要绕过query,因为一遇到query就会溢出)
发表于 2016-6-2 18:09:22 | 显示全部楼层
本帖最后由 Closer 于 2016-6-2 18:13 编辑
123jixinyu 发表于 2016-6-2 18:03
这种想法我也想过,但是首先需要获取查询结果数量,才能分批查询。怎么直接获取查询结果数量(需要绕过que ...

一樣可以用 query 去 count 筆數

你記憶體不夠是一次性的 query 量太大
除了筆數,更重要的是 select 欄位內容量太多

所以應該可以算筆數,再去分組 query

count 請參考 : CI 手冊 - 查詢構造器類

 
 楼主| 发表于 2016-6-2 18:26:52 | 显示全部楼层
Closer 发表于 2016-6-2 18:09
一樣可以用 query 去 count 筆數

你記憶體不夠是一次性的 query 量太大

不可以的,只能传入表,不能传入SQL

本版积分规则