php内存限制无法修改

时间:2012-08-05 10:45:33

标签: php mysql memory

我有一个PHP脚本,可以从数据库加载数据。 我正在加载数据的表是50mb大,当前的php内存设置允许128mb - 我仍然收到错误消息

Allowed memory size of 134217728 bytes exhausted (tried to allocate 6 bytes)

一些研究让我在php.ini中更改了以下内容:

memory_limit = 128M

我将其更改为-1,根据documentation将其设置为无限。无济于事。

即使查询返回所有50mb,它不仅没有意义,因为限制设置为128mb,它不应该抱怨 - 奇怪的是,我运行的查询甚至不需要太多内存:当我回应它时out并直接在数据库中运行它,它只返回三行。查询如下所示:

SELECT * FROM table WHERE foreign_id=1

有谁知道如何解决这个问题?我想将内存限制设置为无限。

编辑1

首先 - 我从终端运行脚本而不是从我的浏览器运行脚本是否重要?

其次,这是php代码:

//Connect to database
$user="root";
$databasePassword="password";
$host="127.0.0.1";
$database="primarydata";
$identifier=mysql_connect($host,$user,$databasePassword,true);
$db1=mysql_select_db($database);

//Select * from first table
$query="SELECT id,name,city,country FROM table1 WHERE id>=1 ORDER BY id ASC";
$result=mysql_query($query);
$datas=array();
while($row=mysql_fetch_object($result)) $datas[]=(object) $row;

//Loop through artists
for($i=0;$i<sizeof($datas);$i++){
    for($j=$i+1;$j<sizeof($datas);$j++){
        //This is where the problem occurs
        $query="SELECT * FROM table2 WHERE data_id=".$datas[$i]->id;
    }
}

第三,我是否必须使用“--enable-memory-limit”?

2 个答案:

答案 0 :(得分:2)

尝试:

ini_set('memory_limit','-1')

当我将数百万条目插入数据库(样本)时,我遇到了与您相同的问题。这个有帮助。

编辑:添加,不推荐使用此功能(仅限于本地主机,例如我给你的例子,将大量的样本数据输入数据库等)。这个答案是在你发布你的PHP代码之前发布的...

答案 1 :(得分:2)

  1. 返回对象将使用更多RAM
  2. 为什么不在另一个里面写一个。
  3. 不推荐使用mysql_ *方法,你应该使用较新的mysqli_ *方法。
  4. 为什么要将整个第一个结果集加载到数组中?有100MB,MySQL客户端库已经将50MB加载到其缓存中,然后再用PHP缓存它。
  5. 示例:

    //Select * from first table
    $query  = "SELECT id, name, city, country FROM table1 WHERE id >= 1 ORDER BY id ASC";
    $result = mysqli_query($dbc, $query);
    while($row = mysqli_fetch_array($result)) {
        //Loop through artists
        $query2  = "SELECT * FROM table2 WHERE data_id = " . $row['id'];
        $result2 = mysqli_query($dbc, $query2);
        while($artist = mysqli_fetch_array($result2)) {
            // Do stuff with $row and $artist
        }
    }