>  기사  >  백엔드 개발  >  간단한 PHP+MySQL 페이징 클래스

간단한 PHP+MySQL 페이징 클래스

jacklove
jacklove원래의
2018-06-11 23:42:172097검색

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

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基本语法

위 내용은 간단한 PHP+MySQL 페이징 클래스의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.