我在两个页面上使用相同的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)。
有没有人能帮我弄清楚,在这个循环只显示了我数据库中的每条记录一次之后,该如何结束它呢?提前感谢!
发布于 2012-11-09 23:01:19
尝试将LIMIT 52添加到您的查询中,并执行while循环,
while ($t = mysql_fetch_array($qry)) {
//do something
}发布于 2012-11-09 22:58:31
主要问题:
1)易受SQL injection attacks攻击。享受销毁您的服务器的过程。
2)术语:你不是从一个数组中获取。您正在从结果集中获取一行数据,并将该行作为数组返回。
3)即使您在while()条件中使用了一些丑陋的语法,您的循环应该在52条记录之后终止,或者没有更多的记录可用。检查您的查询是否按照预期的顺序/格式实际获取了正确的记录。您的代码中没有任何东西会导致PHP输出“重复”的行。
发布于 2012-11-09 22:58:41
除了< 52之外,还可以使用mysql_num_rows($qry)来终止循环
类似于:
(($t = mysql_fetch_array($qry)) != null && ($i < mysql_num_rows($qry) || $i < 52))https://stackoverflow.com/questions/13310316
复制相似问题