您当前的位置: 首页 > 网站编程 > PHP教程 > 一个数据库操作类(跨MYSQL,MSSQL,PG)

一个数据库操作类(跨MYSQL,MSSQL,PG)

作者:xiaoxiao 来源:未知 发布时间: 2013-12-06 17:43 点击:
// -函数清单 索引: // - Open: 打开数据库连接 Line:71 // - Close: 关闭数据库连接 Line:107 // - SelectDB: 选择数据库 Line:129 // - Query: 创建查询 Line:151 // - DataSeek: 移动记录指针 Line:175 // - FieldName: 获取字段名称 Line:198 // - FieldType: 获

一个数据库操作类(跨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
  /**********************************************************************************
              此类将数据库操作封装,具有良好的可移植性,针对数据库:mysql,mssql,pg 
  *原作者:Andrzej Manczyk 整理:玉面修罗  E-mail/msn:xiuluo-999@163.com 时间:2006-12-20*       
  ************************************************************************************
  // -函数清单                                                    索引:
  // - 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;
  }
  }
  //********************************方法实现完毕****************************************//
  ?>

分享到:
本文"一个数据库操作类(跨MYSQL,MSSQL,PG)"由远航站长收集整理而来,仅供大家学习与参考使用。更多网站制作教程尽在远航站长站。
顶一下
(0)
0%
踩一下
(0)
0%
[点击 次] [返回上一页] [打印]
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 密码: 验证码:
关于本站 - 联系我们 - 网站声明 - 友情连接- 网站地图 - 站点地图 - 返回顶部
Copyright © 2007-2013 www.yhzhan.com(远航站长). All Rights Reserved .
远航站长:为中小站长提供最佳的学习与交流平台,提供网页制作与网站编程等各类网站制作教程.
官方QQ:445490277 网站群:26680406 网站备案号:豫ICP备07500620号-4