【发布时间】:2013-08-09 21:44:25
【问题描述】:
我的项目使用了一个开源的 PHP MySQL 库https://github.com/ajillion/PHP-MySQLi-Database-Class
但是项目年中报告:“致命错误:在/home1/flipalbu/public_html/kvisofttest/login-admin/Lib/class.MysqliDb.php中允许的内存大小为134217728字节用尽(试图分配4294967296字节)在第 422 行”这个错误,
我的服务器是:linux x86_64
PHP 版本 5.4.17
Mysql 版本:5.5.32
memory_limit = 128M
第 422 行:call_user_func_array (array ($ stmt, 'bind_result'), $ parameters);
查询部分代码:
$ db = new MysqliDb ('LocalHost', 'root', 'PASSWD', 'DB');
$ wqdb = $ db-> query ("SELECT * FROM db_table");
foreach ($ wqdb as $ row) {
$ con. = $ row ['ID'];
}
echo $ con;
有什么办法可以解决吗?
/** 错误代码**/
protected function _dynamicBindResults(mysqli_stmt $stmt)
{
$parameters = array();
$results = array();
$meta = $stmt->result_metadata();
$row = array();
while ($field = $meta->fetch_field()) {
$row[$field->name] = null;
$parameters[] = & $row[$field->name];
}
call_user_func_array(array($stmt, 'bind_result'), $parameters);
while ($stmt->fetch()) {
$x = array();
foreach ($row as $key => $val) {
$x[$key] = $val;
}
array_push($results, $x);
}
return $results;
}
【问题讨论】:
-
您正在耗尽 PHP 可用的内存。大概是因为您的数据库表很大,并且您只是选择了没有条件或限制子句的所有记录。
-
你要获取多少行?
-
有 - 不要从数据库中选择所有内容。
-
将内存限制增加到最大值
ini_set('memory_limit', '-1'); -
@User016,不;这可能是命令行上的解决方案(即使那样,也很少)。但是,这看起来是一个 Web 应用程序,您不希望实例占用大量内存。查询需要优化。