PHP无限循环问题

时间:2012-11-09 14:53:33

标签: php loops while-loop infinite

我在两个页面上使用相同的while循环,唯一的区别是每个页面上的不同SQL调用。第一个工作正常,抓取查询中的内容并将其显示在图像滑块中:

  <?php

            $qry = mysql_query(sprintf("SELECT * FROM manageme WHERE element IN ('%s')", $element));
            $i = 0;
            while (($t = mysql_fetch_array($qry)) != null && $i < 52) { $i++;?>
                <li>


                    <a href="">                                                           
                        <img src="<?php print $t['fileLocation']; ?>"; 
                        title="<?php print $t['element_name']; ?>"; 
                        name="<?php print $t['clickLocation']; ?>";
                        alt="wat" 
                        class="btnshow" />
                    </a>
                </li>
<?php } ?>

这是有效的,因为它应该单步执行循环并从查询中获取内容,只要返回的条目少于52个,当每个记录显示一次时结束。

在使用不同的SQL调用实现相同的while循环时,会出现问题。

      <?php

$qry = mysql_query(sprintf("SELECT u.username, us.user_id, us.service_id,
                                        s.imageID, s.title, s.clickLocation, s.fileLocation, s.element_name
                                        FROM user u, user_service us, manageme s
                                        WHERE us.user_id = %s
                                        AND s.imageID = us.service_id", $_COOKIE['user_id']));
            $i = 0;
            while (($t = mysql_fetch_array($qry)) != null && $i < 52) { $i++;?>
                <li>


                    <a href="">                                                           
                        <img src="<?php print $t['fileLocation']; ?>"; 
                        title="<?php print $t['element_name']; ?>"; 
                        name="<?php print $t['clickLocation']; ?>";
                        alt="wat" 
                        class="btnshow" />
                    </a>
                </li>
<?php } ?>

当内容显示一次时,它不是从数组中抓取并结束while循环,而是继续循环图像滑块中的内容,直到显示52个条目。因此,例如,如果SQL调用只找到要在图像滑块中显示的4条记录,则在结束循环之前,4组显示13次(52/4)。

任何人都可以帮助我弄清楚如何在我的数据库中显示一次且仅一次的每条记录后结束此循环吗?提前谢谢!

5 个答案:

答案 0 :(得分:1)

尝试将LIMIT 52添加到您的查询中,然后执行while循环,

  while ($t = mysql_fetch_array($qry)) {
  //do something
  }

答案 1 :(得分:0)

主要问题:

1)易受SQL injection attacks影响。享受您的服务器 破坏。

2)术语:你没有从“数组”中获取。您从结果集中获取一行数据,将该行作为数组返回。

3)你的循环应该在52条记录之后终止或者没有更多的记录是可用的,即使你在while()条件下使用了一些丑陋的语法。检查您的查询是否按照您期望的顺序/格式实际获取正确的记录。您的代码中没有任何内容会导致PHP输出“重复”行。

答案 2 :(得分:0)

除了mysql_num_rows($qry)

之外,

使用< 52来终止循环

类似的东西:

 (($t = mysql_fetch_array($qry)) != null && ($i < mysql_num_rows($qry) || $i < 52))

答案 3 :(得分:0)

From the manual您对mysql_fetch_array($qry)的调用似乎永远不会返回null。在结果集的末尾,您将获得false返回。如果您更改条件以检查此情况,您应该能够终止循环

答案 4 :(得分:0)

摆脱$i < 52检查。而是将LIMIT 52添加到SQL查询的末尾。然后将while循环更改为:

while ($t = mysql_fetch_array($qry)) {
....
}