用于限制使用PHP从MySQL数据库获取的结果的默认代码如下
$sql="SELECT *
FROM `tablename`
WHERE `Type` LIKE '$var1'
LIMIT 0 , 30";
当我们需要连续显示结果时,我们可以使用以下更改代码
$start=0; $end=30;
$start=$_GET['start'];
$end=$start+30;
$sql="SELECT *
FROM `tablename`
WHERE `Type` LIKE '$var1'
LIMIT $start , $end";
所以我传递变量的值,从一个链接开始,上面写着Next,就像这个一样
<a href="something.php?start=<? $start+30 ?>">Next</a>
当有更多的结果显示时,一切都会好起来。
考虑这种情况:数据库中有120个条目,PHP文件当前显示的结果为91到120。所以当我点击下一个链接时,它现在显示为空白。那么,当"下一步"链接显示最后一组结果时,我该如何禁用它呢?我认为如果我们知道数据库中的条目总数,这是可能的。但是,如果它是动态的,我们如何计算它呢?
如果对结果使用COUNT()函数,则可以返回简单的信息。
例如:
$total=mysql_fetch_assoc("SELECT COUNT(*) AS `total` FROM `tablename` WHERE `Type` LIKE '$var1'");
返回的值是符合给定条件的条目总数。因此:
$total['total']==120;
然后你可以简单地做一些事情:
if (($start+30)>=$total['total']) {
//Greyed out link
}
else {
//Active link
}
可能还值得一提的是,您的SQL条件存在错误。按照设置方式,将$start值"10"传递给文件将创建查询:
$sql="SELECT *
FROM `tablename`
WHERE `Type` LIKE '$var1'
LIMIT 10 , 40";
它获取40个结果,从结果10开始,而不是10到40之间的结果;常见的误解。
虽然我假设这是一个精简版的代码,但在从外部进入查询的任何内容上使用*mysql_real_eescape_string()*总是值得的。人们可以很容易地将$start值设置为"DROP TABLE tablename
;",使您的查询:
$sql="SELECT *
FROM `tablename`
WHERE `Type` LIKE '$var1'
LIMIT ; DROP TABLE `tablename`;";
我相信你不想要:p
您可以使用SQL_CALC_FOUND_ROWS,因为这不考虑LIMIT子句。然后可以使用SELECT FOUND_ROWS()来检索该值。这样,您总是在原始查询的同时获得计数,并避免任何并发问题。
另一种方法是总是尝试并得到下一个结果。因此,即使只显示30行,也要始终尝试检索31行。然后,您可以检查第31行,如果它存在,您就知道还有另一个页面要显示。