学好PHP
一个数据库操作类(跨MYSQL,MSSQL,PG)
上一篇 / 下一篇 2008-02-17 13:32:26 / 个人分类:转载
<?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
*************************************************************************************/
ClassmDatabase
{
/***********************************成员变量定义***************************************/
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
/***********************************成员方法实现***************************************/
/************************************************************************************
*连接数据库的函数
*************************************************************************************/
FunctionOpen($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;
}
/************************************************************************************
*关闭数据库连接
*************************************************************************************/
FunctionClose()
{
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;
}
/************************************************************************************
*选择数据库
*************************************************************************************/
FunctionSelectDb($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;
}
/************************************************************************************
*创建查询
*************************************************************************************/
FunctionQuery($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;
}
/************************************************************************************
*移动记录指针
*************************************************************************************/
FunctionDataSeek($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;
}
/************************************************************************************
*获取字段名
*************************************************************************************/
FunctionFieldName($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;
}
/************************************************************************************
*获取字段类型
*************************************************************************************/
FunctionFieldType($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;
}
/************************************************************************************
*获取字段长度
*************************************************************************************/
FunctionFieldLength($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;
}
/************************************************************************************
*获取数据并保存到数组,可以用数字索引方式访问数组
*************************************************************************************/
FunctionFetchRow($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;
}
/************************************************************************************
*获取数据并保存到数组,可以用数字索引和关联索引的方式访问
*************************************************************************************/
FunctionFetchArray($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;
}
/************************************************************************************
*获取数据并保存到对象
*************************************************************************************/
FunctionFetchObject($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;
}
/************************************************************************************
*获取结果数据
*************************************************************************************/
FunctionResult($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;
}
/************************************************************************************
*释放结果数据
*************************************************************************************/
FunctionFreeResult($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;
}
/************************************************************************************
*获取记录数量
*************************************************************************************/
FunctionRowsNumber($result)
{
Switch($this->dbType){
Case"mssql":
$r=mssql_num_rows($result);
Break;
Case"mysql":
$r=mysql_num_rows($result);
/**********************************************************************************
此类将数据库操作封装,具有良好的可移植性,针对数据库: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
*************************************************************************************/
ClassmDatabase
{
/***********************************成员变量定义***************************************/
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
/***********************************成员方法实现***************************************/
/************************************************************************************
*连接数据库的函数
*************************************************************************************/
FunctionOpen($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;
}
/************************************************************************************
*关闭数据库连接
*************************************************************************************/
FunctionClose()
{
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;
}
/************************************************************************************
*选择数据库
*************************************************************************************/
FunctionSelectDb($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;
}
/************************************************************************************
*创建查询
*************************************************************************************/
FunctionQuery($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;
}
/************************************************************************************
*移动记录指针
*************************************************************************************/
FunctionDataSeek($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;
}
/************************************************************************************
*获取字段名
*************************************************************************************/
FunctionFieldName($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;
}
/************************************************************************************
*获取字段类型
*************************************************************************************/
FunctionFieldType($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;
}
/************************************************************************************
*获取字段长度
*************************************************************************************/
FunctionFieldLength($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;
}
/************************************************************************************
*获取数据并保存到数组,可以用数字索引方式访问数组
*************************************************************************************/
FunctionFetchRow($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;
}
/************************************************************************************
*获取数据并保存到数组,可以用数字索引和关联索引的方式访问
*************************************************************************************/
FunctionFetchArray($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;
}
/************************************************************************************
*获取数据并保存到对象
*************************************************************************************/
FunctionFetchObject($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;
}
/************************************************************************************
*获取结果数据
*************************************************************************************/
FunctionResult($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;
}
/************************************************************************************
*释放结果数据
*************************************************************************************/
FunctionFreeResult($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;
}
/************************************************************************************
*获取记录数量
*************************************************************************************/
FunctionRowsNumber($result)
{
Switch($this->dbType){
Case"mssql":
$r=mssql_num_rows($result);
Break;
Case"mysql":
$r=mysql_num_rows($result);
相关阅读:
- php连接mysql数据库 (000, 2008-1-15)
- 自己写的MySQL数据库类 (ares333, 2008-1-20)
- PHP程序访问数据库 (bjbj, 2008-1-23)
- WebLogic Server 10.3增加了HTTP Pub/Sub服务器 (menmenyouyou, 2008-1-29)
- 多文件上传类 (mjhui, 2008-2-16)
- 验证码功能的实现 (mjhui, 2008-2-16)
- MySQL集群配置 (tiantang_88, 2008-2-17)
- php 表单验证类 (mjhui, 2008-2-17)
