SQL SELECT语句查询总是可能导致数千条记录。但是在一个页面上显示所有结果并不是一个好主意。因此,我们可以根据要求将此结果划分为多个页面。分页意味着在多个页面中显示您的查询结果,而不是仅将它们全部放在一个长页面中。MySQL通过使用LIMIT子句帮助生成分页,该子句将采用两个参数。第一个参数为OFFSET,第二个参数应从数据库返回多少条记录。下面是一个使用LIMIT子句获取记录以生成分页的简单示例。
- <html>
- <head>
- <title>PHP分页</title>
- </head>
- <body>
- <?php
- $dbhost = 'localhost'; // 数据库主机
- $dbuser = 'root'; // 用户名
- $dbpass = '123456'; // 密码
- $rec_limit = 10; // 每页10条数据
- $conn = mysqli_connect($dbhost, $dbuser, $dbpass);
- if(! $conn ) {
- die('连接失败: ' . mysqli_error());
- }
- mysqli_select_db($conn,'test'); // 要操作的数据
- /* 获取所有的记录数 */
- $sql = "SELECT COUNT(id) FROM test ";
- $retval = mysqli_query( $conn, $sql );
- if(! $retval ) {
- die('没有获取到数据: ' . mysqli_error($conn));
- }
- $row = mysqli_fetch_array($retval, MYSQLI_NUM );
- $rec_count = $row[0];
- if( isset($_GET['page'] ) ) {
- $page = $_GET['page'] + 1;
- $offset = $rec_limit * $page ;
- }else {
- $page = 0;
- $offset = 0;
- }
- $left_rec = $rec_count - ($page * $rec_limit);
- $sql = "SELECT name ".
- "FROM test ".
- "LIMIT $offset, $rec_limit";
- $retval = mysqli_query( $conn, $sql );
- if(! $retval ) {
- die('不能获取到数据: ' . mysqli_error($conn));
- }
- while($row = mysqli_fetch_array($retval, MYSQLI_ASSOC)) {
- echo "TEST name :{$row['name']} <br> ";
- }
- if( $page > 0 ) {
- $last = $page - 2;
- echo "<a href = \"".$_SERVER['PHP_SELF']."?page=$last\">上一页</a> |";
- echo "<a href = \"".$_SERVER['PHP_SELF']."?page=$page\">下一页</a>";
- }else if( $page == 0 ) {
- echo "<a href = \"".$_SERVER['PHP_SELF']."?page=$page\">下一页</a>";
- }else if( $left_rec < $rec_limit ) {
- $last = $page - 2;
- echo "<a href = \"".$_SERVER['PHP_SELF']."?page=$last\">最后一页</a>";
- }
- mysqli_close($conn);
- ?>
- </body>
- </html>