-
- /**
- * クラス名: PdoPage
- * 作成者: Xie Shengtao shishengsoft@gmail.com
- * 説明: PDO クラスから継承され、MS ADO コンポーネントの自動ページング機能と同様の自動ページング機能が追加されます。
- */ bbs.it-home.org
- //---------------開始---------- -------
- class PdoPage extends PDO {
- public $RecordCount = 0; //レコードセット内のレコードの総数
- public $AutoPage = false;//自動ページング機能を有効にする
- public $PageSize = 0; //すべて ページ内のレコード行数
- public $CurrentPage = 0; // 現在のページ
- public $Pages = 0;// 総ページ数
- public $BOF = false;レコード set
- public $EOF = false; // カーソルがレコード set
- private に到達した後 $RecordSet = null; // レコード set
- private $mCurrentRow = -1; Rows = 0; //総レコード数
- // 接続を閉じる
- public function Close(){unset($this);}
- //ページングクエリ
- public function QueryEx($SqlString){
- //自動かどうかページング機能が有効です
- if($this->AutoPage){
- //PageSize パラメーターを確認します
- if ($this->PageSize <=0) die("警告: PageSize を負またはゼロにすることはできません。");
- // レコードの合計数を計算します
- $rs = @parent::query($this ->rebuildSqlString($SqlString));
- $this->Rows = $rs->fetchColumn();
- / / 総ページ数を計算します
- if ($this->Rows < $this->PageSize) {$this->Pages = 1;}
- elseif ($this->Rows % $this->gt ;PageSize) {$this->Pages = intval($this->Rows/$this->PageSize)+1;}
- else {$this->Pages = intval($this->Rows/ $this->PageSize);}
- // CurrentPage の値が 1 と Pages between の間になるように制限します。
- if($this->現在のページ 現在のページ =1;}
- if($this->現在のページ > $this->ページ) {$this->現在のページ = $this->Pages;}
- //オフセットを計算します
- $Offset = $this->PageSize * ($this->CurrentPage - 1);
- //SQL ステートメントを再編成し、SqlString 内のセミコロンを削除します
- $SqlString = str_replace(";","",$SqlString) . " LIMIT $Offset,$this->PageSize;";
- }
- // レコード セットをクエリして返します
- $rs = new PDOStatement();
- $rs = @parent::query($SqlString);
- $this->RecordSet = $rs->fetchAll();//配列を返します
- $this->RecordCount = count($this- >RecordSet);
- if(!$this->AutoPage){$this->Pages = (!$this->RecordCount)?0:1;}
- return $this->RecordCount;
- // フィールド値を取得します
- public function FieldValue($FieldName=""){
- return ($this->RecordSet[$this->mCurrentRow][$FieldName]);
- }
- //--- - ----レコードセットカーソルの移動---------------
- public function Move($RowPos){
- if ($RowPosEOF = false; ; BOF = false;
- }
- パブリック関数 MoveNext(){
- if($this->mCurrentRow < $this->RecordCount-1){
- $this->EOF; = false;
- $this->BOF = false;
- }
- else{
- $this->EOF = true;
- }
- if($this->mCurrentRow > 0 ){
- $this->mCurrentRow--;
- $this->EOF = false;
- }else{
- $this->BOF = true;
- パブリック関数 MoveFirst(){
- $this->mCurrentRow = 0;
- $this->BOF = false;
- }
- パブリック関数 MoveLast(){
- $this - >mCurrentRow = $this->RecordCount-1;
- $this->EOF = false;
- //---------- - -------------------------------------
- // 挿入、変更、削除、操作
- パブリック関数 Execute($SqlString){
- return @parent::query($SqlString)
- }
- //-----------------プライベート関数-- -- ------------------------
- // SQL ステートメントを再構築します。たとえば、「select * from tb2」を「select count( *) tb2" より。クエリ効率を向上させるように設計されています。
- プライベート関数rebuildSqlString($SqlString){
- if(preg_match("/select[ ,./w+/*]+ from/",$SqlString,$marr)){
- $columns = preg_replace("/select|from/ ","",$marr[0]);
- $columns = preg_replace("//*/","/*",$columns);
- $result = preg_replace("/$columns/"," count( *) ",$SqlString);
- return $result;
- }
- }
- //-----終了------------- --- -------------------
- }
- //-------------終了---------- -- ------------
- ?>
-
-
- コードをコピー
-
-
2. 使用例:
MySQLのユーザー名、パスワード、データベース名などを変更する必要があります。
-
- include_once("./pdopage_class.php");
- $db = new PdoPage("mysql:host=localhost;dbname=mydb","root"," 123456");
- $db->Execute("文字セット gbk を設定;");
- $db->AutoPage = false;
- $db->PageSize = 6;
- $db->CurrentPage = 1 ;
- $db->QueryEx("select * from tb2;");
- $db->MoveFirst();
- while (!$db->EOF) {
- echo $db->FieldValue(" id"),"/t",$db->FieldValue("name"),"/t",$db->FieldValue("age"),"/n";
- $db->MoveNext ();
- }
- $db->Close();
>
-
-
|