ホームページ >バックエンド開発 >PHPチュートリアル >php pdo自動ページングのコードと例

php pdo自動ページングのコードと例

WBOY
WBOYオリジナル
2016-07-25 08:51:481487ブラウズ
  1. /**
  2. * クラス名: PdoPage
  3. * 作成者: Xie Shengtao shishengsoft@gmail.com
  4. * 説明: PDO クラスから継承され、MS ADO コンポーネントの自動ページング機能と同様の自動ページング機能が追加されます。
  5. */ bbs.it-home.org
  6. //---------------開始---------- -------
  7. class PdoPage extends PDO {
  8. public $RecordCount = 0; //レコードセット内のレコードの総数
  9. public $AutoPage = false;//自動ページング機能を有効にする
  10. public $PageSize = 0; //すべて ページ内のレコード行数
  11. public $CurrentPage = 0; // 現在のページ
  12. public $Pages = 0;// 総ページ数
  13. public $BOF = false;レコード set
  14. public $EOF = false; // カーソルがレコード set
  15. private に到達した後 $RecordSet = null; // レコード set
  16. private $mCurrentRow = -1; Rows = 0; //総レコード数
  17. // 接続を閉じる
  18. public function Close(){unset($this);}
  19. //ページングクエリ
  20. public function QueryEx($SqlString){
  21. //自動かどうかページング機能が有効です
  22. if($this->AutoPage){
  23. //PageSize パラメーターを確認します
  24. if ($this->PageSize <=0) die("警告: PageSize を負またはゼロにすることはできません。");
  25. // レコードの合計数を計算します
  26. $rs = @parent::query($this ->rebuildSqlString($SqlString));
  27. $this->Rows = $rs->fetchColumn();
  28. / / 総ページ数を計算します
  29. if ($this->Rows < $this->PageSize) {$this->Pages = 1;}
  30. elseif ($this->Rows % $this->gt ;PageSize) {$this->Pages = intval($this->Rows/$this->PageSize)+1;}
  31. else {$this->Pages = intval($this->Rows/ $this->PageSize);}
  32. // CurrentPage の値が 1 と Pages between の間になるように制限します。
  33. if($this->現在のページ 現在のページ =1;}
  34. if($this->現在のページ > $this->ページ) {$this->現在のページ = $this->Pages;}
  35. //オフセットを計算します
  36. $Offset = $this->PageSize * ($this->CurrentPage - 1);
  37. //SQL ステートメントを再編成し、SqlString 内のセミコロンを削除します
  38. $SqlString = str_replace(";","",$SqlString) . " LIMIT $Offset,$this->PageSize;";
  39. }
  40. // レコード セットをクエリして返します
  41. $rs = new PDOStatement();
  42. $rs = @parent::query($SqlString);
  43. $this->RecordSet = $rs->fetchAll();//配列を返します
  44. $this->RecordCount = count($this- >RecordSet);
  45. if(!$this->AutoPage){$this->Pages = (!$this->RecordCount)?0:1;}
  46. return $this->RecordCount;
  47. // フィールド値を取得します
  48. public function FieldValue($FieldName=""){
  49. return ($this->RecordSet[$this->mCurrentRow][$FieldName]);
  50. }
  51. //--- - ----レコードセットカーソルの移動---------------
  52. public function Move($RowPos){
  53. if ($RowPosEOF = false; ; BOF = false;
  54. }
  55. パブリック関数 MoveNext(){
  56. if($this->mCurrentRow < $this->RecordCount-1){
  57. $this->EOF; = false;
  58. $this->BOF = false;
  59. }
  60. else{
  61. $this->EOF = true;
  62. }
  63. if($this->mCurrentRow > 0 ){
  64. $this->mCurrentRow--;
  65. $this->EOF = false;
  66. }else{
  67. $this->BOF = true;
  68. パブリック関数 MoveFirst(){
  69. $this->mCurrentRow = 0;
  70. $this->BOF = false;
  71. }
  72. パブリック関数 MoveLast(){
  73. $this - >mCurrentRow = $this->RecordCount-1;
  74. $this->EOF = false;
  75. //---------- - -------------------------------------
  76. // 挿入、変更、削除、操作
  77. パブリック関数 Execute($SqlString){
  78. return @parent::query($SqlString)
  79. }
  80. //-----------------プライベート関数-- -- ------------------------
  81. // SQL ステートメントを再構築します。たとえば、「select * from tb2」を「select count( *) tb2" より。クエリ効率を向上させるように設計されています。
  82. プライベート関数rebuildSqlString($SqlString){
  83. if(preg_match("/select[ ,./w+/*]+ from/",$SqlString,$marr)){
  84. $columns = preg_replace("/select|from/ ","",$marr[0]);
  85. $columns = preg_replace("//*/","/*",$columns);
  86. $result = preg_replace("/$columns/"," count( *) ",$SqlString);
  87. return $result;
  88. }
  89. }
  90. //-----終了------------- --- -------------------
  91. }
  92. //-------------終了---------- -- ------------
  93. ?>
  94. コードをコピー
  95. 2. 使用例: MySQLのユーザー名、パスワード、データベース名などを変更する必要があります。

    1. include_once("./pdopage_class.php");

    2. $db = new PdoPage("mysql:host=localhost;dbname=mydb","root"," 123456");
    3. $db->Execute("文字セット gbk を設定;");
    4. $db->AutoPage = false;
    5. $db->PageSize = 6;
    6. $db->CurrentPage = 1 ;
    7. $db->QueryEx("select * from tb2;");
    8. $db->MoveFirst();
    9. while (!$db->EOF) {
    10. echo $db->FieldValue(" id"),"/t",$db->FieldValue("name"),"/t",$db->FieldValue("age"),"/n";
    11. $db->MoveNext ();
    12. }
    13. $db->Close();

    14. >

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。