我正在使用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字节,这比配额小很多,因此它必须是第一个执行此操作的搜索。 我真的被卡住了,所以非常感谢任何帮助
答案 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;
}
您正在保存数组中的每一行。假设你有一个非常大的表,分配无法保存这么大的数组。