PHP MySQL 数据库查询结果分页


数千条记录使用 SELECT 语句查询可以将记录分页进行显示,分页意味着在多个页面显示您的查询结果,而不是将它们全部放在一个长页面中。

MySQL 通过使用 LIMIT 子句来帮助生成分页,该子句将接受两个参数。第一个参数作为 OFFSET,第二个参数应从数据库返回多少条记录。

下面是一个使用 LIMIT 子句获取记录以生成分页的简单示例。

例子

请尝试以下示例,每页显示 10 条记录。


<html>
   
   <head>
      <title>PHP mysql查询分页</title>
   </head>
   
   <body>
<?php
 $dbhost = 'localhost:3036';
 $dbuser = 'root';
 $dbpass = 'rootpassword';
 
 $rec_limit = 10;
 $conn = mysql_connect($dbhost, $dbuser, $dbpass);
 
 if(! $conn ) {
    die('无法连接: ' . mysql_error());
 }
 mysql_select_db('test_db');
 
 /* 获取记录总数 */
 $sql = "SELECT count(emp_id) FROM employee ";
 $retval = mysql_query( $sql, $conn );
 
 if(! $retval ) {
    die('无法获取数据: ' . mysql_error());
 }
 $row = mysql_fetch_array($retval, MYSQL_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 emp_id, emp_name, emp_salary ". 
    "FROM employee ".
    "LIMIT $offset, $rec_limit";
    
 $retval = mysql_query( $sql, $conn );
 
 if(! $retval ) {
    die('无法获取数据: ' . mysql_error());
 }
 
 while($row = mysql_fetch_array($retval, MYSQL_ASSOC)) {
    echo "EMP ID :{$row['emp_id']}  <br> ".
       "EMP NAME : {$row['emp_name']} <br> ".
       EMP SALARY : {$row['emp_salary']} <br> ".
       "--------------------------------<br>";
 }
 
 if( $page > 0 ) {
    $last = $page - 2;
    echo "<a href = \"$_PHP_SELF?page = $last\">最后 10 条记录</a> |";
    echo "<a href = \"$_PHP_SELF?page = $page\">下页 10 条记录</a>";
 }else if( $page == 0 ) {
    echo "<a href = \"$_PHP_SELF?page = $page\">下页 10 条记录</a>";
 }else if( $left_rec < $rec_limit ) {
    $last = $page - 2;
    echo "<a href = \"$_PHP_SELF?page = $last\">最后 10 条记录</a>";
 }
 
 mysql_close($conn);
?>
      
   </body>
</html>