2012-05-22 36 views
1

我正在使用Flex應用程序通過PHP對我的數據庫進行兩個調用。在我的第二個電話中,我收到一個錯誤,在我的代理調試器中顯示爲Fatal error: Allowed memory size of 268435456 bytes exhausted (tried to allocate 40961 bytes),這對我來說非常混亂,因爲第一次搜索必須佔用大量內存。 就在我展示代碼之前,我會說我有一個只包含15行的users表,只有10個小列,我有一個包含19行19列的businesses表。所以基本上我沒有很多數據。PHP:麻煩與允許的內存大小

我的第一個具有這樣的功能中的以下Flex代碼:

用戶=新用戶();
user.facebookid = facebookidLbl.text;
getUserIDResult.token = userService.getUserByID(user);

其中要求在PHP中的以下功能:

公共職能getUserByID($項目)

{ 
    $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); 

} 

那麼第二個功能是隻有下面一行在柔性:getBusinessResult.token = businessService.getBusiness(business);

其中調用以下PHP:

公共職能getBusiness($項目)

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


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

第二個功能至少需要一分鐘即可完成,然後我得到上面提到的錯誤,而第一個功能發生幾乎瞬間。我會假設它是第二個函數,但是錯誤還表明它試圖分配40961個字節,這比配額小很多,所以它必須是第一個這樣做的搜索。 我很堅持,所以任何幫助是極大的讚賞

回答

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

您正在將每行保存在一個數組中。假設,你有一個非常大的表,分配失敗保存這麼大的數組。

+0

那麼你推薦我做什麼? – user1077544

+0

@ user1077544:這取決於你爲什麼要存儲它? – Shubham

+0

我需要在我的Flex應用程序中的Google Maps中顯示數據,所以我需要一個for循環,這將允許我從返回的數據創建標記。我曾計劃通過將數據存儲爲數組來實現這一點,所以我在PHP的一面創建了一個數組。 以下是我的Flex代碼的結果: 'var businesslist:ArrayCollection = event.result as ArrayCollection; \t \t \t \t for(var i:int = 0; i user1077544