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


Posted in PHP onDecember 13, 2014

本文实例讲述了可用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数据库程序设计有所帮助。

PHP 相关文章推荐
如何正确理解PHP的错误信息
Oct 09 PHP
PHP 面向对象 final类与final方法
May 05 PHP
php获取通过http协议post提交过来xml数据及解析xml
Dec 16 PHP
无需重新编译php加入ftp扩展的解决方法
Feb 07 PHP
ThinkPHP模板判断输出Empty标签用法详解
Jun 30 PHP
php中把美国时间转为北京时间的自定义函数分享
Jul 28 PHP
php数组随机排序实现方法
Jun 13 PHP
Laravel中Trait的用法实例详解
Mar 16 PHP
验证坐标在某坐标区域内php代码
Oct 08 PHP
PHP实现的一致性Hash算法详解【分布式算法】
Mar 31 PHP
PHP的图像处理实例小结【文字水印、图片水印、压缩图像等】
Dec 20 PHP
PHP延迟静态绑定使用方法实例解析
Sep 05 PHP
PHP中Memcache操作类及用法实例
Dec 12 #PHP
PHP实现PDO的mysql数据库操作类
Dec 12 #PHP
PHP实现的sqlite数据库连接类
Dec 12 #PHP
php+mysql数据库实现无限分类的方法
Dec 12 #PHP
PHP中if和or运行效率对比
Dec 12 #PHP
php实现高效获取图片尺寸的方法
Dec 12 #PHP
CI框架中cookie的操作方法分析
Dec 12 #PHP
You might like
PHP Curl多线程原理实例详解
2013/11/06 PHP
PHP 接入支付宝即时到账功能
2016/09/18 PHP
保证JavaScript和Asp、Php等后端程序间传值编码统一
2009/04/17 Javascript
一个cssQuery对象 javascript脚本实现代码
2009/07/21 Javascript
jQuery-Tools-overlay 使用介绍
2012/07/14 Javascript
JavaScript表达式:URL 协议介绍
2013/03/10 Javascript
IE6下拉框图层问题探讨及解决
2014/01/03 Javascript
jQuery表格插件datatables用法详解
2020/11/23 Javascript
详解Wondows下Node.js使用MongoDB的环境配置
2016/03/01 Javascript
NodeJs读取JSON文件格式化时的注意事项
2016/09/25 NodeJs
Jquery删除css属性的简单方法
2016/12/04 Javascript
html+javascript+bootstrap实现层级多选框全层全选和多选功能
2017/03/09 Javascript
JS获取鼠标位置距浏览器窗口距离的方法示例
2017/04/11 Javascript
vue实现多个元素或多个组件之间动画效果
2018/09/25 Javascript
微信小程序wx.request拦截器使用详解
2019/07/09 Javascript
layui表格数据重载
2019/07/27 Javascript
教你如何用Node实现API的转发(某音乐)
2019/09/20 Javascript
微信小程序实现底部弹出模态框
2020/11/18 Javascript
原生js实现移动小球(碰撞检测)
2020/12/17 Javascript
python使用线程封装的一个简单定时器类实例
2015/05/16 Python
导入tensorflow:ImportError: libcublas.so.9.0 报错
2020/01/06 Python
python interpolate插值实例
2020/07/06 Python
Pycharm github配置实现过程图解
2020/10/13 Python
详解Python Celery和RabbitMQ实战教程
2021/01/20 Python
Stefania Mode美国:奢华设计师和时尚服装
2018/01/07 全球购物
百思买加拿大:Best Buy Canada
2018/03/20 全球购物
纽约香氛品牌:NEST Fragrance
2018/10/15 全球购物
英国领先的餐饮折扣俱乐部:Gourmet Society
2020/07/26 全球购物
大学新生军训自我鉴定
2014/03/18 职场文书
企业元宵节主持词
2014/03/25 职场文书
新闻传媒系求职信范文
2014/04/19 职场文书
电子商务求职信
2014/06/15 职场文书
幼儿园感恩节活动总结
2015/03/24 职场文书
JPA 通过Specification如何实现复杂查询
2021/11/23 Java/Android
sql注入报错之注入原理实例解析
2022/06/10 MySQL
PostgreSQL常用字符串分割函数整理汇总
2022/07/07 PostgreSQL