首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在使用PHP和MySQL时,如何计算while循环的总迭代次数?

在使用PHP和MySQL时,如何计算while循环的总迭代次数?
EN

Stack Overflow用户
提问于 2012-03-28 03:07:42
回答 2查看 610关注 0票数 1

用于限制使用PHP从MySQL数据库获取结果的默认代码如下:

代码语言:javascript
运行
复制
$sql="SELECT * 
FROM  `tablename` 
WHERE `Type` LIKE '$var1'
LIMIT 0 , 30";

当我们需要连续显示结果时,我们可以使用以下代码来更改该代码

代码语言:javascript
运行
复制
$start=0; $end=30;
$start=$_GET['start'];
$end=$start+30;
$sql="SELECT * 
FROM  `tablename` 
WHERE `Type` LIKE '$var1'
LIMIT $start , $end";

因此,我将变量start的值传递给一个链接,如下所示

代码语言:javascript
运行
复制
<a href="something.php?start=<? $start+30 ?>">Next</a>

当有更多的结果要显示时,一切都会正常进行。

考虑这种情况:数据库中有120个条目,而PHP文件当前显示结果91到120。因此,当我单击Next Link now时,它显示为空白。那么,如何在显示最后一组结果时禁用“下一步”链接呢?我认为如果我们知道数据库中的条目总数,这是可能的。但是如果它是动态的,我们如何计算它呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-03-28 03:26:00

如果对结果使用COUNT()函数,就可以得到简单的信息。

例如:

代码语言:javascript
运行
复制
$total=mysql_fetch_assoc("SELECT COUNT(*) AS `total` FROM  `tablename` WHERE `Type` LIKE '$var1'");

返回的值是符合给定条件的条目总数。所以:

代码语言:javascript
运行
复制
$total['total']==120;

然后,您可以简单地执行类似以下内容的操作:

代码语言:javascript
运行
复制
if (($start+30)>=$total['total']) {
    //Greyed out link
}
else {
    //Active link
}

可能还值得一提的是,您的SQL条件是错误的。按照您设置它的方式,将$start值'10‘传递给文件将创建查询:

代码语言:javascript
运行
复制
$sql="SELECT * 
FROM  `tablename` 
WHERE `Type` LIKE '$var1'
LIMIT 10 , 40";

它从结果10开始抓取40个结果,而不是从10到40之间的结果;这是一个常见的误解。

虽然我假设这是代码的精简版本,但对查询中外部的任何内容使用*mysql_real_escape_string()*总是值得的。人们可以很容易地将表的值设置为";DROP $start tablename;",从而使您的查询:

代码语言:javascript
运行
复制
$sql="SELECT * 
FROM  `tablename` 
WHERE `Type` LIKE '$var1'
LIMIT ; DROP TABLE `tablename`;";

我相信你不会想要的:

票数 2
EN

Stack Overflow用户

发布于 2012-03-28 03:34:13

您可以使用SQL_CALC_FOUND_ROWS,因为这没有考虑到LIMIT子句。然后,您可以使用SELECT FOUND_ROWS()来检索该值。这样,您总是在原始查询的同时获得计数,并避免任何并发问题。

另一种方法是始终尝试并获得下一个结果。因此,始终尝试检索31行,即使只显示了30行。然后,您可以检查这第31行,如果它存在,您就知道还有另一个页面要显示。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9896002

复制
相关文章

相似问题

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