Mysql分页(LIMIT)需要一些帮助

时间:2009-11-30 06:35:38

标签: php mysql

我有这段代码:

    $page = $_GET['page'];
    $res_per_page = $_GET['res_per_page'];

    $start_point = (($page * $res_per_page) - $res_per_page);
    $query.= " LIMIT $start_point, $res_per_page";
    $qry_result = mysql_query($query) or die(mysql_error());
    $total_pages = ceil($nr_ads / $res_per_page); 

变量'$ nr_ads'是广告的总nr ......

代码工作正常,但我想知道如何确定哪些广告正在展示,例如:

   Showing ads 10 - 20

...谢谢

2 个答案:

答案 0 :(得分:2)

print 'Showing ads ' . $start_point . ' - ' . min($nr_ads, $start_point + res_per_page);

基本上你已经有了起点(在SQL中给你的LIMIT子句。“终点”的计算方法是将$res_pre_page添加到这个起始点。但是,您可能只有2条记录 - 因此您应该使用min()功能进行打印,例如“显示广告60 - 62”。


跟进:另一个答案提到了SQL注入的风险。使用以下方法是安全的:

$page = intval($_GET['page']);
$res_per_page = max(1, intval($_GET['res_per_page'])); // To avoid division by zero :)

答案 1 :(得分:2)

最简单的方法是在表格中创建一个ID字段并使用它来显示您想要的信息,您的查询将被修改如下:

 LIMIT $start_point, $res_per_page ORDER BY ad_id ASC

从那里,您可以获得第一个结果和最后一个结果,并使用它来输出您正在收集的信息。

一个非常重要的安全说明,以下代码可能导致远程 SQL注入

$query.= " LIMIT $start_point, $res_per_page";

强烈建议您将其更改为:

$query.= " LIMIT $start_point, ".mysql_real_escape_string($res_per_page)." ORDER BY ad_id ASC";