2014-02-26 26 views
1

我有一個選擇,並限制在525的結果,否則,一會卡住。mysql_query選擇限制在525結果

$query_other = "SELECT * FROM prod where active=1 and aprobat=1"; 
    $other = mysql_query($query_other, $conn) or die(mysql_error()); 
    while($row = mysql_fetch_assoc($other)){ 
     $other_prod[]=$row; 
    } 

在的cPanel它顯示超過525,當我在$其他做的var_dump它說類型(MySQL的結果)的資源(525)。它在Apache服務器上,如果有幫助。

如果我把限制525它的作品,並顯示所有頁面,否則只是空白頁。此後任何事情都不起作用。

P.S:我知道mysql_已被棄用,我討厭它,但在任務中需要,我沒有權力。

+0

檢查錯誤日誌。很可能你只是用完了內存。 「資源(525)」只是一個致命的巧合: - 括號中的數字與實際數據無關。 – zerkms

+0

@Volkan Ulukut:實際上,24M的RAM對每個人都應該足夠了。 – zerkms

+0

謝謝,沒有想到內存問題..但我會看到如果是這樣的話。 – user2984950

回答

0

增加內存也無濟於事。這只是一個臨時修復。另外,您需要考慮多個客戶端同時執行相同的查詢。系統如何跟上內存消耗。

但是要選擇性的關於fields你需要回退。

不要

SELECT * 

SELECT `field1`, `field2`, ... 

這將減少內存消耗,讓你處理事情。我想你不需要所有的行。你特別想避免TEXT/BLOB,因爲它們通常很大。只有當你需要顯示/使用它們時才選擇它們。

您還可以使用

LIMIT 0, 100 

通過的結果進行分頁。可能會幫助你一點,但我會選擇正確的領域來永久解決這個問題。

還設置

ini_set('display_errors', true); 
error_reporting(-1); 

,看看PHP告訴你更多關於什麼不順心。

+0

!!呃,專欄? ! – Strawberry

+0

@Strawberry在'MySQL C庫'中,它們被稱爲[字段](http://dev.mysql.com/doc/refman/4.1/en/c-api-data-structures.html)。 ;) – CodeAngry

+0

也許吧。他們絕對不叫行。 – Strawberry

0

如果問題確實是內存,可以動態地隨之增加它:

ini_set("memory_limit","512M"); //i.e. change the memory_limit to 512M, you should specify more than current limit. 
+0

好的,我需要訪問該權利?我的意思是PHP ini?因爲在php文件中根本不起作用。 – user2984950

+0

不,你不知道。你只需要把它放在你的php文件的開頭。這個php.ini值可以從php動態改變。 –

+0

確定它不工作,出於某種原因,我無法弄清楚。 – user2984950