2010-06-15 30 views
1

這是爲什麼代碼拋出內存不足的錯誤,當只有1中的數據庫行..的MySQL和PHP代碼時內存不足,當只有一排

$request_db = mysql_query("SELECT * FROM requests 
       WHERE haveplayed='0'") or die(mysql_error()); 
       $request = mysql_fetch_array($request_db); 
       echo "<table border=\"1\" align=\"center\">"; 
       while ($request['haveplayed'] == "0") { 
        echo "<tr><td>"; 
        echo $request['SongName']; 
        echo "</td><td>"; 
        echo "<tr><td>"; 
        echo $request['Artist'];  
        echo "</td><td>"; 
        echo "<tr><td>"; 
        echo $request['DedicatedTo']; 
        echo "</td><td>"; 
       } 
       echo "</table>"; 

感謝。

回答

3

嗯,說實話,我不明白在這種情況下使用while。你只用這段代碼讀取一行(即使DB中有多行!)。也許你嘗試了類似if($request['haveplayed'] == 0)的東西,但這也不會有太大意義,因爲查詢只返回haveplayed等於0的行。

據我所知,您打算輸出requests表中的一行或多行,其中haveplayed等於0。那不是更像這樣嗎?

$request_db = mysql_query("SELECT * FROM requests WHERE haveplayed='0'") 
       or die(mysql_error()); 

while($request = mysql_fetch_array($request_db)) { 
    // output stuff here ... 
    echo $request['SongName']; 
} 
+0

...我是一個白癡。謝謝 :)。除了簡單的語法錯誤之外,我認識自己的代碼的另一個缺陷是錯誤。 我的代碼有時候是多餘的......感謝堆。 – Sam 2010-06-15 12:25:49

3

由於PHP

null == 0 == '0' 

所以它是循環

使用 '===' 操作符或者更好的 'isset()函數'

while (isset($request['haveplayed']) && $request['haveplayed'] == '0') 

此外,使用在這段代碼中,while是無用的:也許你想在循環中獲取一個新的數組。

+0

所以我只是用'foreach'替換'while'並保留我現有的代碼。 'haveplayed'的默認值實際上是0. – Sam 2010-06-15 11:55:16

+0

在我的數據庫中,最終可能會有一個haveplayed =「1」 – Sam 2010-06-15 11:58:38

+0

我明白了,謝謝:)。 – Sam 2010-06-15 12:27:10

0

沒有太多的努力,什麼樣的數據類型被播放?因爲它看起來像你的while循環永遠不會被滿足,所以試試這個:

$request_db = mysql_query("SELECT * FROM requests 
       WHERE haveplayed='0'") or die(mysql_error()); 
       $request = mysql_fetch_array($request_db); 
       echo "<table border=\"1\" align=\"center\">"; 
       while ($request['haveplayed'] == 0) { 
// or   while ($request['haveplayed'] == false) { 
        echo "<tr><td>"; 
        echo $request['SongName']; 
        echo "</td><td>"; 
        echo "<tr><td>"; 
        echo $request['Artist'];  
        echo "</td><td>"; 
        echo "<tr><td>"; 
        echo $request['DedicatedTo']; 
        echo "</td><td>"; 
       } 
+0

但我將默認值實際設置爲'0'。 – Sam 2010-06-15 11:54:33

+0

我試過你所說的,它仍然給我一個500錯誤(內存不足) – Sam 2010-06-15 11:55:35

+0

在我的數據庫中,它最終有可能有一個haveplayed =「1」 – Sam 2010-06-15 11:58:05

1

這是因爲你有一個無限循環。你的while語句總是如此,因爲這是你從數據庫中提取的唯一東西:hasplayed總是'0',所以它永遠不會停止,因爲該值永遠不會改變。基本上,你是while循環根本就不需要,因爲你從數據庫中提取的唯一東西正是你在while條件中檢查的東西。

也許會做foreach ($request as $r)

+0

在我的數據庫中,它最終有可能有a haveplayed =「1」 – Sam 2010-06-15 11:57:17

+0

哦,我明白了,謝謝。 – Sam 2010-06-15 12:26:08