分页显示Oracle数据库记录的类之一

  <?php

  /*********************************************

  TOracleViewPagev 2.0

  日期:2000-9-23

  分页显示Oracle数据库记录的类

  更新日期:2000-10-19

  增加显示TopRecord的功能,允许第一页显示的记录数与其它页不同。

  作者:sharetop

  email:[email protected]

  ***********************************************/

  class TOracleViewPage {

  var $Table; //表名

  var $MaxLine; //每页显示行数

  var $LinkId; //数据库连接号

  var $Id; //排序参考字段

  var $Offset; //记录偏移量

  var $Total; //记录总数

  var $Number; //本页读取的记录数

  var $TopNumber;//读新记录时实际取出的记录数

  var $Result; //读出的结果

  var $TopResult;//读新记录时的结果

  var $TheFirstPage;//特殊指定第一页的链接

  var $StartRec; //指定第二页的起始记录号

  var $TPages; //总页数

  var $CPages; //当前页数

  var $TGroup;

  var $PGroup; //每页显示的页号个数

  var $CGroup;

  var $Condition; //显示条件 如:where id='$id' order by id desc

  var $PageQuery; //分页显示要传递的参数

  //-------------------------------------

  // 以下构造函数、析构函数及初始化函数

  //-------------------------------------

  //构造函数

  //参数:表名、最大行数、分页参考的字段、每页显示的页号数

  function TOracleViewPage($TB,$ML,$id){

  global $offset;

  $this->Table=$TB;

  $this->MaxLine=$ML;

  $this->Id=$id;

  $this->StartRec=0;

  if(isset($offset)) $this->Offset=$offset;

  else $this->Offset=0;

  $this->Condition="";

  $this->TheFirstPage=NULL;

  $this->PageQury=NULL;

  }

  //初始化

  //参数:用户名、密码、数据库

  function InitDB($user,$password,$db){

  if (PHP_OS == "WINNT") $dllid=dl("php3_oci80.dll");

  $this->LinkId = OCILogon($user,$password,$db);

  }

  //断开

  function Destroy(){

  OCILogoff($this->LinkId);

  }

  //-------------------------

  // Set 函数

  //-------------------------

  //设置显示条件

  //如:where id='$id' order by id desc

  //要求是字串,符合SQL语法(本字串将加在SQL语句后)

  function SetCondition($s){

  $this->Condition=$s;

  }

  //设置每组的显示个数

  function SetNumGroup($pg){

  $this->PGroup=$pg;

  }

  //设置首页,如无则为NULL

  function SetFirstPage($fn){

  $this->TheFirstPage=$fn;

  }

  //设置起始记录,如无则取默认0

  function SetStartRecord($org){

  $this->StartRec=$org;

  }

  //设置传递参数

  // key参数名 value参数值

  // 如:setpagequery("id",$id);如有多个参数要传递,可多次调用本函数。

  function SetPageQuery($key,$value){

  $tmp[key]=$key; $tmp[value]=$value;

  $this->PageQuery[]=$tmp;

  }

  //--------------------------------

  // Get 函数

  //--------------------------------

  //取记录总数

  function GetTotalRec(){

  $SQL="SELECT Count(*) AS total FROM ".$this->Table." ".$this->Condition;

  $stmt = OCIParse($this->LinkId,$SQL);

  $bool = OCIExecute($stmt);

  if (!$bool) {

  echo "连接失败!";

  OCILogoff($this->LinkId);

  exit;

  }

  else {

  OCIFetch($stmt);

  $this->Total=OCIResult($stmt,1);

  }

  OCIFreeStatement($stmt);

  }

  //取总页数、当前页

  function GetPage(){

  $this->TPages=ceil($this->Total/$this->MaxLine);

  $this->CPages=ceil($this->Offset/$this->MaxLine)+1;

  }

  //取总组数、当前组

  function GetGroup() {

  $this->TGroup=ceil($this->TPages/$this->PGroup);

  $this->CGroup=ceil($this->CPages/$this->PGroup);

  }