php实现可用于mysql,mssql,pg数据库操作类

  本文实例讲述了可用mysql,mssql,pg三种数据库的数据库操作类,你只要作任何修改就可以方便的改变你数据库的类型.分享给大家供大家参考。具体分析如下:

  函数清单,索引:

  Open:打开数据库连接 Line:71

  Close:关闭数据库连接 Line:107

  SelectDB:选择数据库 Line:129

  Query:创建查询 Line:151

  DataSeek:移动记录指针 Line:175

  FieldName:获取字段名称 Line:198

  FieldType:获取字段类型 Line:220

  FieldLenght:获取字段长度 Line:242

  FetchRow:获取数据并保存到数组(数字索引) Line:264

  FetchArray:获取数据并保存进数组(数字和关联) Line:289

  FetchObject:获取数据并保存到对象(对象方式) Line:315

  Result:获取结果数据 Line:341

  FreeResult:刷新记录集 Line:363

  RowsNumber:获取记录数量 Line:385

  FieldsNumber:获取字段数量 Line:407

  CurRecNumber:获取当前记录号(从0开始) Line:429

  RecordNumber:获取当前行号(从1开始) Line:438

  MoveFirstRec:移动到第一条记录 Line:447

  MoveLastRec:移动到最后一条记录 Line:469

  MovePreviousRec:移动到前一条记录 Line:495

  MoveNextRec:移动到下一条记录 Line:521

  MoveToRec:移动到一个特定的记录(从1开始) Line:548

  php数据库操作类代码如下:

  

复制代码 代码如下:
<?PHP

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

  此类将数据库操作封装,具有良好的可移植性,针对数据库:mysql,mssql,pg

  ************************************************************************************

  // -函数清单 索引:

  // - Open: 打开数据库连接 Line:71

  // - Close: 关闭数据库连接 Line:107

  // - SelectDB: 选择数据库 Line:129

  // - Query: 创建查询 Line:151

  // - DataSeek: 移动记录指针 Line:175

  // - FieldName: 获取字段名称 Line:198

  // - FieldType: 获取字段类型 Line:220

  // - FieldLenght: 获取字段长度 Line:242

  // - FetchRow: 获取数据并保存到数组(数字索引) Line:264

  // - FetchArray: 获取数据并保存进数组(数字和关联) Line:289

  // - FetchObject: 获取数据并保存到对象(对象方式) Line:315

  // - Result: 获取结果数据 Line:341

  // - FreeResult: 刷新记录集 Line:363

  // - RowsNumber: 获取记录数量 Line:385

  // - FieldsNumber: 获取字段数量 Line:407

  // - CurRecNumber: 获取当前记录号(从0开始) Line:429

  // - RecordNumber: 获取当前行号(从1开始) Line:438

  // - MoveFirstRec: 移动到第一条记录 Line:447

  // - MoveLastRec: 移动到最后一条记录 Line:469

  // - MovePreviousRec: 移动到前一条记录 Line:495

  // - MoveNextRec: 移动到下一条记录 Line:521

  // - MoveToRec: 移动到一个特定的记录(从1开始) Line:548

  ************************************************************************************

  //Inputs:

  // - dbType: databases type: mssql, mysql, pg

  // - connectType: connection type: c - common connection,

  // p - open persistent connection

  // - connect: for MS SQL Server - server name,

  // for MySQL - hostname [:port] [:/path/to/socket] ,

  // for PostgreSQL - host, port, tty, options,

  // dbname (without username and password)

  // - username

  // - password

  // - dbName: database name

  // - query: SQL query

  // - result: result set identifier

  // - RowNumber:

  // - offset: field identifier

  // - ResultType: a constant and can take the following values: PGSQL_ASSOC, PGSQL_NUM, and PGSQL_BOTH

  // - FieldName

  //

  //Returns:

  // - result: result set identifier

  // - connect link identifier

  // - record number (starting at 0: CurrRecNumber or starting at 1: RecordNumber)

  // - number of fields in the specified result set

  // - number of rows in the specified result set

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

  Class mDatabase

  {

  /***********************************成员变量定义***************************************/

  var $dbType; // 数据库类型: mssql, mysql, pg

  var $connectType; // 连接类型: c - common connection, p - open persistent connection

  var $idCon; // 连接号

  var $curRow; // current row number of data from the result

  // associated with the specified result identifier array

  var $seek; // current row number of data from DataSeek function array

  /***********************************成员方法实现***************************************/

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

  *连接数据库的函数

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

  Function Open($dbType, $c, $connect, $username = "", $password = "")

  {

  $this->dbType = $dbType;

  Switch ($dbType) {

  Case "mssql":

  If ($connectType == "c") {

  $idCon = mssql_connect($connect, $username, $password);

  } Else {

  $idCon = mssql_pconnect($connect, $username, $password);

  }

  Break;

  Case "mysql":

  If ($connectType == "c") {

  $idCon = mysql_connect($connect, $username, $password);

  } Else {

  $idCon = mysql_pconnect($connect, $username, $password);

  }

  Break;

  Case "pg":

  If ($connectType == "c") {

  $idCon = pg_connect($connect . " user=" . $username . " password=" . $password);

  } Else {

  $idCon = pg_pconnect($connect . " user=" . $username . " password=" . $password);

  }

  Break;

  Default:

  $idCon = 0;

  Break;

  }

  $this->idCon = $idCon;

  Return $idCon;

  }

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

  *关闭数据库连接

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

  Function Close()

  {

  Switch ($this->dbType) {

  Case "mssql":

  $r = mssql_close($this->idCon);

  Break;

  Case "mysql":

  $r = mysql_close($this->idCon);

  Break;

  Case "pg":

  $r = pg_close($this->idCon);

  Break;

  Default:

  $r = False;

  Break;

  }

  Return $r;

  }

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

  *选择数据库

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

  Function SelectDb($dbName)

  {

  Switch ($this->dbType) {

  Case "mssql":

  $r = mssql_select_db($dbName);

  Break;

  Case "mysql":

  $r = mysql_select_db($dbName);

  Break;

  Case "pg":

  $r = False;

  Break;

  Default:

  $r = False;

  Break;

  }

  Return $r;

  }

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

  *创建查询

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

  Function Query($query)

  {

  Switch ($this->dbType) {

  Case "mssql":

  $r = mssql_query($query, $this->idCon);

  Break;

  Case "mysql":

  $r = mysql_query($query, $this->idCon);

  Break;

  Case "pg":

  $r = pg_exec($this->idCon, $query);

  Break;

  Default:

  $r = False;

  Break;

  }

  $this->curRow[$r] = 0;

  $this->seek[$r] = 0;

  Return $r;

  }

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

  *移动记录指针

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

  Function DataSeek($result, $RowNumber)

  {

  Switch ($this->dbType) {

  Case "mssql":

  $r = mssql_data_seek($result, $RowNumber);

  Break;

  Case "mysql":

  $r = mysql_data_seek($result, $RowNumber);

  Break;

  Case "pg":

  $r = False;

  Break;

  Default:

  $r = False;

  Break;

  }

  $this->seek[$result] = (int) $RowNumber;

  Return $r;

  }

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

  *获取字段名

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

  Function FieldName($result, $offset)

  {

  Switch ($this->dbType) {

  Case "mssql":

  $r = mssql_field_name($result, $offset);

  Break;

  Case "mysql":

  $r = mysql_field_name($result, $offset);

  Break;

  Case "pg":

  $r = pg_fieldname($result, $offset);

  Break;

  Default:

  $r = False;

  Break;

  }

  Return $r;

  }

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

  *获取字段类型

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

  Function FieldType($result, $offset)

  {

  Switch ($this->dbType) {

  Case "mssql":

  $r = mssql_field_type($result, $offset);

  Break;

  Case "mysql":

  $r = mysql_field_type($result, $offset);

  Break;

  Case "pg":

  $r = pg_fieldtype($result, $offset);

  Break;

  Default:

  $r = False;

  Break;

  }

  Return $r;

  }

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

  *获取字段长度

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

  Function FieldLength($result, $offset)

  {

  Switch ($this->dbType) {

  Case "mssql":

  $r = mssql_field_length($result, $offset);

  Break;

  Case "mysql":

  $r = mysql_field_len($result, $offset);

  Break;

  Case "pg":

  $r = pg_fieldsize($result, $offset);

  Break;

  Default:

  $r = False;

  Break;

  }

  Return $r;

  }

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

  *获取数据并保存到数组,可以用数字索引方式访问数组

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

  Function FetchRow($result, $RowNumber = 0)

  {

  Switch ($this->dbType) {

  Case "mssql":

  $r = mssql_fetch_row($result);

  Break;

  Case "mysql":

  $r = mysql_fetch_row($result);

  Break;

  Case "pg":

  $r = pg_fetch_row($result, $RowNumber);

  If ($r) {

  $this->curRow[$result] = $RowNumber;

  $this->seek[$result] = $RowNumber;

  }

  Break;

  Default:

  $r = False;

  Break;

  }

  Return $r;

  }

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

  *获取数据并保存到数组,可以用数字索引和关联索引的方式访问

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

  Function FetchArray($result, $RowNumber = 0, $ResultType = 2)

  {

  Switch ($this->dbType) {

  Case "mssql":

  $r = mssql_fetch_array($result);

  Break;

  Case "mysql":

  $r = mysql_fetch_array($result);

  Break;

  Case "pg":

  $r = pg_fetch_array($result, $RowNumber, $ResultType);

  If ($r) {

  $this->curRow[$result] = $RowNumber;

  $this->seek[$result] = $RowNumber;

  }

  Break;

  Default:

  $r = False;

  Break;

  }

  Return $r;

  }

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

  *获取数据并保存到对象

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

  Function FetchObject($result, $RowNumber = 0, $ResultType = 2)

  {

  Switch ($this->dbType) {

  Case "mssql":

  $r = mssql_fetch_object($result);

  Break;

  Case "mysql":

  $r = mysql_fetch_object($result);

  Break;

  Case "pg":

  $r = pg_fetch_object($result, $RowNumber, $ResultType);

  If ($r) {

  $this->curRow[$result] = $RowNumber;

  $this->seek[$result] = $RowNumber;

  }

  Break;

  Default:

  $r = False;

  Break;

  }

  Return $r;

  }

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

  *获取结果数据

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

  Function Result($result, $RowNumber, $FieldName)

  {

  Switch ($this->dbType) {

  Case "mssql":

  $r = mssql_result($result, $RowNumber, $FieldName);

  Break;

  Case "mysql":

  $r = mysql_result($result, $RowNumber, $FieldName);

  Break;

  Case "pg":

  $r = pg_result($result, $RowNumber, $FieldName);

  Break;

  Default:

  $r = False;

  Break;

  }

  Return $r;

  }

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

  *释放结果数据

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

  Function FreeResult($result)

  {

  Switch ($this->dbType) {

  Case "mssql":

  $r = mssql_free_result($result);

  Break;

  Case "mysql":

  $r = mysql_free_result($result);

  Break;

  Case "pg":

  $r = pg_freeresult($result);

  Break;

  Default:

  $r = False;

  Break;

  }

  Return $r;

  }

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

  *获取记录数量

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

  Function RowsNumber($result)

  {

  Switch ($this->dbType) {

  Case "mssql":

  $r = mssql_num_rows($result);

  Break;

  Case "mysql":

  $r = mysql_num_rows($result);

  Break;

  Case "pg":

  $r = pg_numrows($result);

  Break;

  Default:

  $r = False;

  Break;

  }

  Return $r;

  }

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

  *获取字段数量

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

  Function FieldsNumber($result)

  {

  Switch ($this->dbType) {

  Case "mssql":

  $r = mssql_num_fields($result);

  Break;

  Case "mysql":

  $r = mysql_num_fields($result);

  Break;

  Case "pg":

  $r = pg_numfields($result);

  Break;

  Default:

  $r = False;

  Break;

  }

  Return $r;

  }

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

  *获取当前记录号(从0开始)

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

  Function CurRecNumber($result)

  {

  $r = $this->curRow[$result];

  Return $r;

  }

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

  *获取当前行号(从1开始)

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

  Function RecordNumber($result)

  {

  $cr = $this->CurRecNumber($result) + 1;

  Return $cr;

  }

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

  *移动到第一条记录

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

  Function MoveFirstRec($result)

  {

  Switch ($this->dbType) {

  Case "pg":

  $r = $this->FetchRow($result, 0);

  Break;

  Default:

  $rn = $this->DataSeek($result, 0);

  If ($rn) {

  $r = $this->FetchRow($result);

  If ($r) $this->curRow[$result] = $this->seek[$result];

  } Else {

  $r = False;

  }

  Break;

  }

  Return $r;

  }

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

  *移动到最后一条记录

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

  Function MoveLastRec($result)

  {

  $rs = $this->RowsNumber($result);

  If ($rs) {

  $rs--;

  Switch ($this->dbType) {

  Case "pg":

  $r = $this->FetchRow($result, $rs);

  Break;

  Default:

  $rn = $this->DataSeek($result, $rs);

  If ($rn) {

  $r = $this->FetchRow($result);

  If ($r) $this->curRow[$result] = $this->seek[$result];

  } Else {

  $r = False;

  }

  Break;

  }

  }

  Return $r;

  }

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

  *移动到前一条记录

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

  Function MovePreviousRec($result)

  {

  $rs = $this->CurRecNumber($result);

  If ($rs) {

  $rs--;

  Switch ($this->dbType) {

  Case "pg":

  $r = $this->FetchRow($result, $rs);

  Break;

  Default:

  $rn = $this->DataSeek($result, $rs);

  If ($rn) {

  $r = $this->FetchRow($result);

  If ($r) $this->curRow[$result] = $this->seek[$result];

  } Else {

  $r = False;

  }

  Break;

  }

  }

  Return $r;

  }

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

  *移动到下一条记录

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

  Function MoveNextRec($result)

  {

  $rs = $this->CurRecNumber($result);

  $rn = $this->RowsNumber($result);

  $rs++;

  If ($rs != $rn) {

  Switch ($this->dbType) {

  Case "pg":

  $r = $this->FetchRow($result, $rs);

  Break;

  Default:

  $re = $this->FetchRow($result);

  If ($re) {

  $r = $re;

  $this->curRow[$result]++;

  $this->seek[$result] = $this->curRow[$result];

  } Else {

  $r = False;

  }

  Break;

  }

  }

  Return $r;

  }

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

  *移动到指定记录(编号从0开始)

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

  Function MoveToRec($result, $RowNumber)

  {

  $rn = $this->RowsNumber($result);

  If ($RowNumber > 0 And $RowNumber < $rn) {

  $RowNumber--;

  Switch ($this->dbType) {

  Case "pg":

  $r = $this->FetchRow($result, $RowNumber);

  Break;

  Default:

  $rn = $this->DataSeek($result, $RowNumber);

  If ($rn) {

  $r = $this->FetchRow($result);

  If ($r) $this->curRow[$result] = $this->seek[$result];

  } Else {

  $r = False;

  }

  Break;

  }

  }

  Return $r;

  }

  }

  //********************************方法实现完毕****************************************//

  ?>

  希望本文所述对大家的PHP数据库程序设计有所帮助。