分页解决方案
以下文档描述了 MySQLi 和 PDO 支持的分页解决方案。
转到 https://github.com/rajdeeppaul/Pagination 并将 pagination.php 文件下载到项目目录中。假设你的目录结构如下所示:
project directory
|
|--pagination.php (pagination script)
|--index.php (file where you want to use this pagination script)
假设你希望 URL 看起来像这样:
http://example.com/index.php // user is on page 1
http://example.com/index.php?page=1 // user is on page 1
http://example.com/index.php?page=5 // user is on page 5
// etc ...
index.php
-
在
index.php页面中包含pagination.php文件,如下所示:require_once('pagination.php'); -
创建
Pagination类的实例,如下所示:$pg = new Pagination($databaseDriver, $hostname, $username, $password, $databaseName);构造函数方法采用以下参数,
(1)
$databaseDriver:数据库驱动,目前支持的驱动程序是 MySQLi 和 PDO
(2)$hostname:主机名
(3)$username:用户名
(4)$password:密码
(4)$databaseName:数据库名称例子):
$pg = new Pagination('mysqli', 'localhost', 'root', 'pass', 'pagination_db'); $pg = new Pagination('pdo', 'localhost', 'root', 'pass', 'pagination_db'); -
使用
setPaginationParameters()方法设置分页参数,如下所示:$pg->setPaginationParameters($rowsPerPage, $numOfPaginationLinks);setPaginationParameters()方法采用以下参数,(1)
$rowsPerPage:每页显示的表行数
(2)$numOfPaginationLinks:每页显示的分页链接数例子):
$pg->setPaginationParameters(10, 5); -
调用
getResult()方法根据 URL 查询?page=X显示表行,如下所示:$resultSet = $pg->getResult($queryString, $bindParameterArray, $globalGetArray, $keyFromURLQuery);getResult()方法采用以下参数,(1)
$queryString:SELECT查询字符串
(2)$bindParameterArray:包含绑定变量或值的
数组(3)$globalGetArray:超全局数组$_GET
(4)$keyFromURLQuery:来自 URL 查询的键即page例子):
$resultSet = $pg->getResult('SELECT * FROM pagination', NULL, $_GET, 'page'); $resultSet = $pg->getResult('SELECT * FROM pagination WHERE column1 = ? AND column2 = ?', array($value1, $value2), $_GET, 'page');注意: 不要在查询中指定任何
LIMIT或OFFSET子句,脚本会处理这些。现在遍历结果集即
$resultSet数组来访问/显示行详细信息,如下所示:foreach($resultSet as $row){ /* access/display row details */ /* $row['column1'], $row['column2'] etc. */ }注意: 如果要查看完整的数组结构,请执行
var_dump($resultSet);。 -
使用
getPaginationLinks()方法显示分页链接,如下所示:$pgLinks = $pg->getPaginationLinks();getPaginationLinks()方法不接受任何参数,并返回以下格式的分页链接数组,array (size=3) 'prev' => @boolean 'links' => @array 'next' => @boolean现在循环通过
$pgLinks数组来显示 paginagtion 链接,如下所示:if(is_array($pgLinks) && count($pgLinks) && $pgLinks['prev']){ /* previous pages are available */ echo '« '; } if(is_array($pgLinks) && count($pgLinks) && count($pgLinks['links'])){ /* show pagination links */ foreach($pgLinks['links'] as $link){ echo '<a href="example.php?page='.$link.'">'.$link.'</a> '; } } if(is_array($pgLinks) && count($pgLinks) && $pgLinks['next']){ /* next pages are available */ echo '»'; }注意: 如果要查看完整的数组结构,请执行
var_dump($pgLinks);。
脚注: 你可以根据自己的选择设置结果行和分页链接的样式。