-
- /**
- * 클래스 이름: PdoPage
- * 작성자: Xie Shengtao shishhengsoft@gmail.com
- * 설명: PDO 클래스에서 상속되며 MS ADO 구성 요소의 자동 페이징 기능과 유사한 자동 페이징 기능을 추가합니다.
- */bbs.it-home.org
- //--------- -----시작---------------
- class PdoPage 확장 PDO {
- public $RecordCount = 0 // 레코드세트의 총 레코드 수
- public $ AutoPage = false; // 자동 페이징 활성화
- public $PageSize = 0; // 페이지당 레코드 줄 수
- public $CurrentPage = 0; // 현재 페이지
- public $Pages = 0; / / 총 페이지 수
- public $BOF = false; // 커서가 레코드세트에 도달하기 전
- public $EOF = false; // 커서가 레코드세트에 도달한 후
- private $RecordSet = null; / Recordset
- private $mCurrentRow = -1; //레코드 세트의 현재 커서 위치
- private $Rows = 0;//총 레코드 수
- //연결 닫기
- public 함수 닫기 (){unset($this );}
- //페이징 쿼리
- public function QueryEx($SqlString){
- // 자동 페이징 기능 활성화 여부
- if($this->AutoPage ){
- // PageSize 매개변수 확인
- if ($this->PageSize <=0) die("경고: PageSize는 음수 또는 0일 수 없습니다.")
- // 총 개수를 계산합니다. 레코드 수
- $rs = @parent ::query($this->rebuildSqlString($SqlString))
- $this->Rows = $rs->fetchColumn();
- // 총 페이지 수 계산
- if ($ this->Rows < $this->PageSize) {$this->Pages = 1;}
- elseif ($this->Rows % $ this->PageSize) {$this-> Pages = intval($this->Rows/$this->PageSize) 1;}
- else {$this->Pages = intval($this- >Rows/$this->PageSize) }
- // CurrentPage 값을 1과 페이지 사이로 제한합니다.
- if($this->CurrentPage < 1) {$this->CurrentPage =1;}
- if($this->CurrentPage > $this->Pages) {$this- >CurrentPage = $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;
- }
- // 필드 값 가져오기
- 공개 함수 FieldValue($FieldName="" ){
- return ($this->RecordSet[$this->mCurrentRow][$FieldName])
- }
- //---------레코드 세트 커서 이동- - -------------
- 공용 함수 Move($RowPos){
- if ($RowPos<0) $RowPos = 0
- if ($RowPos > $ this ->RecordCount-1) $RowPos = $this->RecordCount-1;
- $this->mCurrentRow = $RowPos
- $this->EOF = false; - >BOF = false;
- }
- 공용 함수 MoveNext(){
- if($this->mCurrentRow < $this->RecordCount-1){
- $this-> ; mCurrentRow;
- $this->EOF = false;
- }
- else{
- $this->EOF = true; > }
- }
- 공용 함수 MovePrev(){
- if($this->mCurrentRow > 0){
- $this->mCurrentRow--; ; EOF = false;
- $this->BOF = false;
- $this->BOF =
- }
- }
- 공개 함수 ) {
- $this->mCurrentRow = 0;
- $this->EOF = false;
- $this->BOF = false
- }
- 공용 함수 MoveLast() {
- $this->mCurrentRow = $this->RecordCount-1;
- $this->EOF = false
- $this->BOF =
- } > //---------------------------------- - --
- // 삽입, 수정, 삭제 및 기타 작업을 수행하는 데 사용됩니다.
- public function Execute($SqlString){
- return @parent::query($SqlString)
- }
- / /----개인 기능---------------------------- -
- // 쿼리 효율성을 높이기 위해 "select * from tb2"를 "select count(*) from tb2"로 다시 작성하는 등 SQL 문을 재구성합니다.
- 비공개 함수 buildSqlString($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;"); = false;
- $db->PageSize = 6;
- $db->QueryEx("select * from tb2;"); db->MoveFirst();
- while (!$db->EOF) {
- echo $db->FieldValue("id"),"/t",$db->FieldValue( "이름"),"/t",$db->FieldValue("나이"),"/n"
- $db->MoveNext()
- $db-> ;닫기();
?>
-
-
-
- 코드 복사
-
>
|