1

我在两个页面上使用相同的 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)。

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

4

5 回答 5

1

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

  while ($t = mysql_fetch_array($qry)) {
  //do something
  }
于 2012-11-09T15:01:19.300 回答
0

主要问题:

1)易受SQL注入攻击。享受让您的服务器被摧毁。

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

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

于 2012-11-09T14:58:31.420 回答
0

用于mysql_num_rows($qry)终止循环,除了< 52

就像是:

 (($t = mysql_fetch_array($qry)) != null && ($i < mysql_num_rows($qry) || $i < 52))
于 2012-11-09T14:58:41.040 回答
0

从手册看来,您的调用似乎mysql_fetch_array($qry)永远不会返回 null。在结果集结束时,您将获得false回报。如果您更改条件以检查这一点,您应该能够终止循环

于 2012-11-09T14:59:50.847 回答
0

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

while ($t = mysql_fetch_array($qry)) {
....
}
于 2012-11-09T15:00:05.707 回答