分页解决方案

以下文档描述了 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

  1. index.php 页面中包含 pagination.php 文件,如下所示:

    require_once('pagination.php');
    
  2. 创建 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');
    
  3. 使用 setPaginationParameters() 方法设置分页参数,如下所示:

    $pg->setPaginationParameters($rowsPerPage, $numOfPaginationLinks);
    

    setPaginationParameters() 方法采用以下参数,

    (1)$rowsPerPage:每页显示的表行数
    (2)$numOfPaginationLinks:每页显示的分页链接数

    例子):

    $pg->setPaginationParameters(10, 5);
    
  4. 调用 getResult() 方法根据 URL 查询 ?page=X 显示表行,如下所示:

    $resultSet = $pg->getResult($queryString, $bindParameterArray, $globalGetArray, $keyFromURLQuery);
    

    getResult() 方法采用以下参数,

    (1)$queryStringSELECT 查询字符串
    (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');
    

    注意: 不要在查询中指定任何 LIMITOFFSET 子句,脚本会处理这些。

    现在遍历结果集即 $resultSet 数组来访问/显示行详细信息,如下所示:

    foreach($resultSet as $row){
        /* access/display row details */
        /* $row['column1'], $row['column2'] etc. */
    }
    

    注意: 如果要查看完整的数组结构,请执行 var_dump($resultSet);

  5. 使用 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 '&raquo;';
    }
    

    注意: 如果要查看完整的数组结构,请执行 var_dump($pgLinks);

脚注: 你可以根据自己的选择设置结果行和分页链接的样式。