繁体   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