一个数据库操作类(跨MYSQL,MSSQL,PG)(1)
<? 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 ;
}
//........................下面接
?>
一个数据库操作类(跨MYSQL,MSSQL,PG)(2)
<? php
//.........接上面
/************************************************************************************
*获取数据并保存到数组,可以用数字索引和关联索引的方式访问
*************************************************************************************/
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 ;
}
}
//********************************方法实现完毕****************************************//
?>