2014-02-15 86 views
0

我建立这需要执行这个SQL语句块:致命错误“允许用尽134217728个字节的内存大小...”

$sql = 'SELECT c.fullname AS CourseName, from_unixtime(l.time) AS DateandTime, u.username AS Username, 
     l.ip AS IPAddress, u.firstname AS FirstName, u.lastname AS LastName, u.email AS Email, l.module As Activity, 
     l.action As Action, l.url As URL, l.info AS Information, r.roleid AS RoleID, l.userid AS UserID, c.id as CourseID 
     FROM {log} l, {user} u, {role_assignments} r, {course} c 
     WHERE r.userid = l.userid AND c.id = ' . $courseid; 
if($Flag == 0) 
{ 
$sql = $sql . " ORDER BY DateandTime Desc"; 
} 
elseif($Flag == 1) 
{ 
$sql = $sql . " ORDER BY Username Asc"; 
} 

其中“$ courseid”是所选课程ID。执行时,Moodle是返回此错误消息:

Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 2048 bytes) in D:\Moodle\lib\weblib.php on line 1277 

我没有使用这个PHP命令:

现在
ini_set('memory_limit', '-1'); 

修改SQL语句后,我收到此错误:

Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 925 bytes) in D:\Moodle\lib\dml\moodle_database.php on line 842 

而当刷新页面,我会得到这个错误:

Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 528 bytes) in D:\Moodle\lib\dml\mysqli_native_moodle_database.php on line 1022 

但我知道这不是一个解决方案。

任何人都可以帮助我,我将不胜感激?

在此先感谢。

此致

艾哈迈德

+0

这些都是细小的分配,所以我认为你真正的问题是在其他地方(什么是使用所有可用内存的机器上) – Dave

+0

喜戴夫,感谢您的回复;从这个SQL语句生成的总记录是21559,正如我在MySQL Workbench上所做的那样。有什么建议么?提前致谢。 –

+1

逐行处理记录,并且不要在同一时间将它们存储在内存中。 –

回答

2

的Moodle提供raise_memory_limit($newlimit); 功能在setuplib.php声明和可只要config.php中包含的方法。

使用此方法是提高Moodle内存限制的首选方法。

如下使用它:

raise_memory_limit([MEMORY_STANDARD|MEMORY_EXTRA|MEMORY_HUGE|MEMORY_UNLIMITED|'128M'|...]);

相关问题