用于限制使用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";因此,我将变量start的值传递给一个链接,如下所示
<a href="something.php?start=<? $start+30 ?>">Next</a>当有更多的结果要显示时,一切都会正常进行。
考虑这种情况:数据库中有120个条目,而PHP文件当前显示结果91到120。因此,当我单击Next Link now时,它显示为空白。那么,如何在显示最后一组结果时禁用“下一步”链接呢?我认为如果我们知道数据库中的条目总数,这是可能的。但是如果它是动态的,我们如何计算它呢?
发布于 2012-03-28 03:26:00
如果对结果使用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";它从结果10开始抓取40个结果,而不是从10到40之间的结果;这是一个常见的误解。
虽然我假设这是代码的精简版本,但对查询中外部的任何内容使用*mysql_real_escape_string()*总是值得的。人们可以很容易地将表的值设置为";DROP $start tablename;",从而使您的查询:
$sql="SELECT *
FROM `tablename`
WHERE `Type` LIKE '$var1'
LIMIT ; DROP TABLE `tablename`;";我相信你不会想要的:
发布于 2012-03-28 03:34:13
您可以使用SQL_CALC_FOUND_ROWS,因为这没有考虑到LIMIT子句。然后,您可以使用SELECT FOUND_ROWS()来检索该值。这样,您总是在原始查询的同时获得计数,并避免任何并发问题。
另一种方法是始终尝试并获得下一个结果。因此,始终尝试检索31行,即使只显示了30行。然后,您可以检查这第31行,如果它存在,您就知道还有另一个页面要显示。
https://stackoverflow.com/questions/9896002
复制相似问题