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