我在我的类上创建了一个方法来获取并在数组中存储所需的SQL语句所包含的所有结果,并且它的工作正常。现在,经过几个月的制作,我遇到了这个错误:
Fatal error: Allowed memory size of 67108864 bytes exhausted (tried to allocate 3503272 bytes) in C:\xxpathxx\class.DGC_Gerais.php on line 0
当我开始检查时,我将错误追踪到mysql_free_result()
,但在评论该行时,它仍然可以正常工作。
以下是_fetch
方法:
PUBLIC static function _fetch($sql){
$q = mysql_query($sql);
if(mysql_num_rows($q) > 0):
for($a=0 ; $linha = mysql_fetch_row($q) ; $a++){ // forEach row.
foreach($linha as $chave => $valor): // forEach field.
$result[$a][$chave] = $valor;
endforeach;
}
// mysql_free_result($q);
return $result;
else:
return false;
endif;
}
答案 0 :(得分:1)
该代码非常错综复杂,可以简化为:
public static function _fetch($sql) {
$q = mysql_query($sql);
if (mysql_num_rows($q) == 0) {
return false;
}
$result = array();
while ($linha = mysql_fetch_row($q)) {
$result[] = $linha;
}
return $result;
}
如果没有双循环则完全相同。
问题是您从数据库中获取所有数据并将其存储在$result
中,这意味着它需要存储在内存中。并且PHP默认限制脚本可用的内存量,因此您只是超出了该限制。 mysql_free_result
没有任何与此有关的东西。首先尝试获取更少的数据,或者处理while
循环内的数据,而无需将所有内容存储在数组中。
如果这没有帮助,请使用ini_set('memory_limit', $limit)
小心调低内存限制。