1

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

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

用户=新用户();
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 字节,这比配额小得多,所以它必须是第一个执行此操作的搜索。我真的被卡住了,所以非常感谢任何帮助

4

1 回答 1

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;
}

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

于 2012-05-22T14:51:54.263 回答