PHP:允许的内存大小问题

时间:2012-05-22 14:47:19

标签: php flex memory mysqli

我正在使用Flex应用程序通过PHP对我的数据库进行两次调用。在我的第二次调用中,我收到一个错误,在我的代理调试器中显示为Fatal error: Allowed memory size of 268435456 bytes exhausted (tried to allocate 40961 bytes),这对我来说非常混乱,因为第一次搜索必须占用大量内存。 就在我显示代码之前,我会说我有一个users表只包含15行,只有10个小列,我有一个businesses表,其中包含19行19列。所以基本上我首先没有很多数据。

我的第一个在函数中有以下Flex代码:

  

user = new User();
    user.facebookid = facebookidLbl.text;
  getUserIDResult.token = userService.getUserByID(user);

在PHP中调用以下函数:

  

公共函数getUserByID($ item)

{
    $getfbid = mysqli_real_escape_string($this->connection, $item->facebookid);

    $stmt = mysqli_prepare($this->connection,

    "SELECT

          users.facebookid,

          users.dob,

          users.latitude,

          users.longitude

       FROM users where users.facebookid='{$getfbid}'");

    mysqli_stmt_execute($stmt);

    $row = new User();

    mysqli_stmt_bind_result($stmt, $row->facebookid, $row->dob, $row->latitude, $row->longitude);

    if (mysqli_stmt_fetch($stmt)) {

        return $row;

    } else {

        return null;

    }

    mysqli_stmt_free_result($stmt);

    mysqli_close($this->connection);

}

然后第二个函数在flex中只有以下行:getBusinessResult.token = businessService.getBusiness(business);

调用以下PHP:

  

公共职能getBusiness($ item)

{
    $result = mysqli_query($this->connection, "SELECT * FROM businesses");


while (($row = mysqli_fetch_array($result, MYSQL_NUM)) !== false) 
{
$data[] = $row;
}

第二个函数需要至少一分钟才能完成,然后我得到上面提到的错误,而第一个函数几乎立即发生。我认为它是第二个函数,但错误还表明它正在尝试分配40961字节,这比配额小很多,因此它必须是第一个执行此操作的搜索。 我真的被卡住了,所以非常感谢任何帮助

1 个答案:

答案 0 :(得分:0)

Fatal error: Allowed memory size of 268435456 bytes exhausted (tried to allocate 40961 bytes)

此错误确实意味着它无法分配40961字节,但这意味着在尝试分配额外的40961字节时超出了配额。看看你的代码:

while (($row = mysqli_fetch_array($result, MYSQL_NUM)) !== false) 
{
$data[] = $row;
}

您正在保存数组中的每一行。假设你有一个非常大的表,分配无法保存这么大的数组。