簡體   English   中英

當代碼和內存不足時,只有一行時,MySQL和PHP

[英]MySQL & PHP while code is out of memory, when there is only one row

當數據庫中只有1行時,為什么此代碼會引發內存不足錯誤。

$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>";

謝謝。

因為在PHP中

null == 0 == '0'

所以它在循環

使用'==='運算符或更好的'isset()'

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

此外,在代碼中使用while毫無用處:也許您想在循環內獲取一個新數組。

嗯,說實話,在這種情況下,我不了解while的用法。 您只需使用此代碼獲取一行(即使數據庫中有多於一行!)。 也許您嘗試了類似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']; 
}

那是因為那里有無限循環。 您的while語句始終為true,因為這是您從數據庫中提取的唯一內容:haveplayed始終為“ 0”,因此它永遠不會停止,因為該值不會更改。 基本上,您根本不需要while循環,因為從數據庫中提取的唯一內容就是您在while條件中檢查的內容。

也許做一個foreach ($request as $r)

在不花費太多精力的情況下,發揮了什么數據類型? 因為看起來您的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>";   
                }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM