Home  >  Article  >  Backend Development  >  Simple PHP+MySQL paging class

Simple PHP+MySQL paging class

jacklove
jackloveOriginal
2018-06-11 23:42:171979browse

初学者一般都不太理解分页的原理,因此常常为分页发愁

paging.php
<?php
class Paging {
  public static $count = 0;
  public static $size = 0;
  public static $page = 0;
  static function prepare($sql, $pagesize=10) {
    $page = isset($_GET[&#39;page&#39;]) ? $_GET[&#39;page&#39;] : 1;
    $pageon = ($page - 1) * $pagesize;
    $sql = preg_replace(&#39;/select\s/i&#39;, &#39;$0SQL_CALC_FOUND_ROWS &#39;, $sql) . " limit $pageon, $pagesize";
    $rs = mysql_query($sql);
    $p = mysql_query(&#39;SELECT FOUND_ROWS()&#39;);
    list(self::$count) = mysql_fetch_row($p);
    self::$size = $pagesize;
    self::$page = $page;
    return $rs;
  }
  static function bar($tpl=&#39;&#39;) {
    if(!$tpl) $tpl = &#39;<a href=?reset>首页</a> <a href=?prve>上一页</a> <a href=?next>下一页</a> <a href=?end>尾页</a>&#39;;
    $count = ceil(self::$count / self::$size);
    $page = self::$page;
    unset($_GET[&#39;page&#39;]);
    $d = array(
      &#39;reset&#39; => 1,
      &#39;prve&#39; => $page > 1 ? $page - 1 : 1,
      &#39;next&#39; => $page < $count ? $page + 1 : $count,
      &#39;end&#39; => $count,
    );
    foreach($d as $k=>$v) {
      $_GET[&#39;page&#39;] = $v;
      $tpl = str_replace($k, http_build_query($_GET), $tpl);
    }
    echo $tpl;
  }
}


通常你都有类似这样的语句
$sql =".....";
$rs = mysql_query($sql);

$rs = mysql_query("select ....");
你只需改作
include 'paging.php';
$rs = paging::prepare($sql, 每页行数);
在需要出现分页条的地方写入
paging::bar();
就可以了,非常简单!

换一种调用写法,可能感觉要好些

paging.php
class Paging {
  private static $_Instance;
  private function __clone(){}
  public static function getInstance() {
    if(empty(self::$_Instance)) self::$_Instance = new self();
    return self::$_Instance;
  }
  protected $count = 0;
  protected $size = 0;
  protected $page = 0;
  function prepare($sql, $pagesize=10) {
    $page = isset($_GET[&#39;page&#39;]) ? $_GET[&#39;page&#39;] : 1;
    $pageon = ($page - 1) * $pagesize;
    $sql = preg_replace(&#39;/select\s/i&#39;, &#39;$0SQL_CALC_FOUND_ROWS &#39;, $sql) . " limit $pageon, $pagesize";
    $rs = mysql_query($sql);
    $p = mysql_query(&#39;SELECT FOUND_ROWS()&#39;);
    list($this->count) = mysql_fetch_row($p);
    $this->size = $pagesize;
    $this->page = $page;
    return $rs;
  }
  function bar($tpl=&#39;&#39;) {
    if(!$tpl) $tpl = &#39;共{count}页 第{page}页 <a href=?{reset}>首页</a> <a href=?{prve}>上一页</a> <a href=?{next}>下一页</a> <a href=?{end}>尾页</a>&#39;;
    $count = ceil($this->count / $this->size);
    $page = $this->page;
    $d = array(
      &#39;{reset}&#39; => 1,
      &#39;{prve}&#39; => $page > 1 ? $page - 1 : 1,
      &#39;{next}&#39; => $page < $count ? $page + 1 : $count,
      &#39;{end}&#39; => $count,
      &#39;{count}&#39; => $count,
      &#39;{page}&#39; => $page,
    );
    foreach($d as $k=>&$v) {
      if(in_array($k, array(&#39;{reset}&#39;, &#39;{prve}&#39;, &#39;{next}&#39;, &#39;{end}&#39;))) {
        $_GET[&#39;page&#39;] = $v;
        $v = http_build_query($_GET);
      }
    }
    echo strtr($tpl, $d);
  }
}
function mysql_paging_query($sql, $num=10) {
  return Paging::getInstance()->prepare($sql, $num);
}
function mysql_paging_bar($tpl=&#39;&#39;) {
  return Paging::getInstance()->bar($tpl);
}
include &#39;paging.php&#39;;
$rs = mysql_paging_query($sql, 20);//替代 mysql_query
mysql_paging_bar();//显示分页条

本文讲解了简易 PHP+MySQL 分页类 相关知识请关注php中文网。

相关推荐:

php生成二维码的三种方法

PHP命令行

php基本语法

The above is the detailed content of Simple PHP+MySQL paging class. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn