分页解决方案
以下文档描述了 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);
。
脚注: 你可以根据自己的选择设置结果行和分页链接的样式。