The following documentation describes both MySQLi and PDO supported pagination solution.
Go to https://github.com/rajdeeppaul/Pagination and download pagination.php file into your project directory. Let's say your directory structure looks like this:
project directory
|
|--pagination.php (pagination script)
|--index.php (file where you want to use this pagination script)
And suppose you want the URL to look like this:
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 ...
Include pagination.php file in index.php page, like this:
require_once('pagination.php');
Create an instance of Pagination class, like this:
$pg = new Pagination($databaseDriver, $hostname, $username, $password, $databaseName);
The constructor method takes the following parameters,
(1)$databaseDriver: Database driver, currently supported drivers are MySQLi and PDO
(2)$hostname: Hostname
(3)$username: Username
(4)$password: Password
(4)$databaseName: Database name
Example(s):
$pg = new Pagination('mysqli', 'localhost', 'root', 'pass', 'pagination_db');
$pg = new Pagination('pdo', 'localhost', 'root', 'pass', 'pagination_db');
Set pagination parameters using setPaginationParameters() method, like this:
$pg->setPaginationParameters($rowsPerPage, $numOfPaginationLinks);
The setPaginationParameters() method takes the following parameters,
(1)$rowsPerPage: Number of table rows to display per page
(2)$numOfPaginationLinks: Number of pagination links to display per page
Example(s):
$pg->setPaginationParameters(10, 5);
Call getResult() method to display table rows based on the URL query ?page=X, like this:
$resultSet = $pg->getResult($queryString, $bindParameterArray, $globalGetArray, $keyFromURLQuery);
The getResult() method takes the following parameters,
(1)$queryString: SELECT query string
(2)$bindParameterArray: Array containing bind variables or values
(3)$globalGetArray: Superglobal array $_GET
(4)$keyFromURLQuery: Key from the URL query i.e. page
Example(s):
$resultSet = $pg->getResult('SELECT * FROM pagination', NULL, $_GET, 'page');
$resultSet = $pg->getResult('SELECT * FROM pagination WHERE column1 = ? AND column2 = ?', array($value1, $value2), $_GET, 'page');
Note: Don't specify any LIMIT or OFFSET clause in the query, the script will take care of these.
Now loop through the result set i.e. $resultSet array to access/display row details, like this:
foreach($resultSet as $row){
/* access/display row details */
/* $row['column1'], $row['column2'] etc. */
}
Note: If you want to see the complete array structure, do var_dump($resultSet);.
Display pagination links using getPaginationLinks() method, like this:
$pgLinks = $pg->getPaginationLinks();
The getPaginationLinks() method doesn't take any parameter and returns an array of pagination links in the following format,
array (size=3)
'prev' => @boolean
'links' => @array
'next' => @boolean
Now loop through the $pgLinks array to display paginagtion links, like this:
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 '»';
}
Note: If you want to see the complete array structure, do var_dump($pgLinks);.
Footnote(s): You can style the result rows and pagination links as per your choice.