首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP的无限while循环问题

问PHP的无限while循环问题
EN

Stack Overflow用户
提问于 2012-11-09 22:53:33
回答 5查看 1.1K关注 0票数 1

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

代码语言:javascript
复制
  <?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循环时,就会出现问题。

代码语言:javascript
复制
      <?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)。

有没有人能帮我弄清楚,在这个循环只显示了我数据库中的每条记录一次之后,该如何结束它呢?提前感谢!

EN

回答 5

Stack Overflow用户

发布于 2012-11-09 23:01:19

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

代码语言:javascript
复制
  while ($t = mysql_fetch_array($qry)) {
  //do something
  }
票数 1
EN

Stack Overflow用户

发布于 2012-11-09 22:58:31

主要问题:

1)易受SQL injection attacks攻击。享受销毁您的服务器的过程。

2)术语:你不是从一个数组中获取。您正在从结果集中获取一行数据,并将该行作为数组返回。

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

票数 0
EN

Stack Overflow用户

发布于 2012-11-09 22:58:41

除了< 52之外,还可以使用mysql_num_rows($qry)来终止循环

类似于:

代码语言:javascript
复制
 (($t = mysql_fetch_array($qry)) != null && ($i < mysql_num_rows($qry) || $i < 52))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13310316

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档