[英]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.