PHP中对数据库操作的封装


Posted in PHP onOctober 09, 2006

PHP中对数据库操作的封装

在动态网面设计中很多都要涉及到对数据库的操作,但是有时跟据需要而改用其它后台数据库,就需要大量修改程序。这是一件枯燥、费时而且容易出错的功作。其实我们可以用PHP中的类来实现对数据库操作的封装,从而使写出的程序在很小的改动下就可以完成后台数据库的更改。

现在我们把其封装在dbfz.inc中,其设计如下:

<?
class dbInterface{ var $dbID=1; //用于确定当前操作的数据库,当dbID为1代表MySql,当为 2代表 SQL Server,为3时为ODBC或其它。
var $dbHost; //数据库所在主机域名
var $dbUsername; //数据库用户名
var $dbPassword; //用户密码
//设置主机、用户名及密码函数
function setParameter($host,$username,$password){
$this->dbUsername=$username;
$this->dbHost=$host;
$this->dbPassword=$password;

} //联接数库函数
function dbConnect(){
switch($this->dbID)
{
case 1;
return @mysql_connect($this->dbHost,$this->dbUsername,$this->dbPassword);
case 2;
//用支持SQL Server的函数
case 3;
//用支持ODBC的函数
}  
}
//关闭数库函数
function dbClose($dataHandle){
switch($this->dbID)
{
case 1;
mysql_close($dataHandle);
case 2;
//用支持SQL Server的函数
case 3;
//用支持ODBC的函数
}  
}

//执行SQL语句函数
function dbQuery($dbName,$sql,$dbHandle){
switch($this->dbID)
{
case 1;
return @mysql_db_query($dbName,$sql,$dbHandle);
case 2;
//用支持SQL Server的函数
case 3;
//用支持ODBC的函数
}  
}

//检索SQL返回值的当前记录函数
function dbFetchrow($dataHandle,$offset=-1){
switch($this->dbID)
{
case 1;
@mysql_data_seek($dataHandle,$offset);
return @mysql_fetch_row($dataHandle);
case 2;
//用支持SQL Server的函数
case 3;
//用支持ODBC的函数
}  
}

//返回检索记录数函数
function dbNumrows($dataHandle){
switch($this->dbID)
{
case 1;
return @mysql_num_rows($dataHandle);
case 2;
//用支持SQL Server的函数
case 3;
//用支持ODBC的函数
}  
}

//返回检索列数函数
function dbNumcols($dataHandle){
switch($this->dbID)
{
case 1;
return @mysql_num_fields($dataHandle);
case 2;
//用支持SQL Server的函数
case 3;
//用支持ODBC的函数
}  
}
}

现把使用说明如下:

在程序中用dbInterface类生一个对象$test=new dbInterface;

设置参数
test->$dbUsername ;用户名
test->$dbPassword;密码
test->$dbHost;主机
void setParameter(string host, string username, string password);

数据库连接:dbhandle test->dbConnect();

返回值:fasle ,数据库连接错误
>0, 数据库连接句柄

数据库关闭:void test->dbClose(dbhandle);

表操作:int test->dbQuery(string databasename, string sql,dbhandle);执行SQL语句

返回值: false, SQL执行错误
>0, SQL执行正确, 同时指向SQL返回值,

数据操作:int test->dbFetchrow(dataHandle,int offset);检索SQL返回值的当前记录,成功执行后,指针移向下一条记录
int test->dbNumrows(dataHandle); 取得SQL执行后(主要为SELECT语句)获得的记录数
int test->dbNumcols(dataHandle); 取得SQL执行后(主要为SELECT语句)获得的记录字段数

现在我们发一个例了讲解:

数据库采用MQSQL:其主机名为 "localhost",用户名为"root"和密码""。
在mysql中有一个testdb数据库及其中的表table1,表包括:name和pay两个字段

-----
<HTML><HEAD>
<TITLE>test</TITLE>
</HEAD><BODY>
<P> <?php
require("testdb.inc"); //装载dbInterface类
$test = new dbInterface;//用类dbInterface生成一个对象
$test->setParameter("localhost","root","");//设置数据库参数
$db = $test->dbConnect();//连接数据库
$Query = "SELECT name,pay FROM table ";//设置SQL语句
$temp_result = $test->dbQuery("testdb",$Query,$db);//执行数据主库操作
echo "<br>";
$ls_num = $test->dbNumrows($temp_result); //取得查询结果的记录数
echo $ls_num;
echo "<br>";
if (ls_num>0 )
{
$ls_col = $test->dbNumcols($db); //取得表的列数
echo $ls_col;  
echo "<br>";
$cate_result=$test->dbFetchrow($temp_result,0);//取得记录数的第一行
$hcid=$cate_result[0];// 取得name的值
$hcate=$cate_result[1];//取得pay的值
echo $hcid;
echo "<br>";
echo $hcate;
}

?>  
<HR>
<ADDRESS></ADDRESS>
</BODY></HTML>

这就是一个简单的应用封装的类来完成对数据库的操作。如果要操作其它数据库只需要修改dbInterface类中的dbID变量即可.

PHP 相关文章推荐
我的论坛源代码(九)
Oct 09 PHP
WINXP下apache+php4+mysql
Nov 25 PHP
扩展你的 PHP 之入门篇
Dec 04 PHP
用PHP实现多服务器共享SESSION数据的方法
Mar 16 PHP
php mysql Errcode: 28 终极解决方法
Jul 01 PHP
fleaphp crud操作之findByField函数的使用方法
Apr 23 PHP
php隐藏IP地址后两位显示为星号的方法
Nov 21 PHP
php读取csv数据保存到数组的方法
Jan 03 PHP
PHP图像裁剪缩略裁切类源码及使用方法
Jan 07 PHP
PHP实现的redis主从数据库状态检测功能示例
Jul 20 PHP
PHP自定义错误处理的方法分析
Dec 19 PHP
解决php用mysql方式连接数据库出现Deprecated报错问题
Dec 25 PHP
用DBSQL类加快开发MySQL数据库程序的速度
Oct 09 #PHP
一个简洁的多级别论坛
Oct 09 #PHP
用ODBC的分页显示
Oct 09 #PHP
为查询结果建立向后/向前按钮
Oct 09 #PHP
投票管理程序
Oct 09 #PHP
用PHP和ACCESS写聊天室(九)
Oct 09 #PHP
用PHP和ACCESS写聊天室(八)
Oct 09 #PHP
You might like
php数组中删除元素的实现代码
2012/06/22 PHP
解析:php调用MsSQL存储过程使用内置RETVAL获取过程中的return值
2013/07/03 PHP
10个超级有用值得收藏的PHP代码片段
2015/01/22 PHP
php写app接口并返回json数据的实例(分享)
2017/05/20 PHP
php实现和c#一致的DES加密解密实例
2017/07/24 PHP
PHP接口继承及接口多继承原理与实现方法详解
2017/10/18 PHP
php5.3/5.4/5.5/5.6/7常见新增特性汇总整理
2020/02/27 PHP
JQuery的ajax基础上的超强GridView展示
2009/09/18 Javascript
jquery退出each循环的写法
2014/02/26 Javascript
JavaScript eval() 函数介绍及应用示例
2014/07/29 Javascript
JavaScript使用DeviceOne开发实战(一) 配置和起步
2015/12/01 Javascript
jQuery实现的跨容器无缝拖动效果代码
2016/06/21 Javascript
微信小程序 devtool隐藏的秘密
2017/01/21 Javascript
ES6新数据结构Map功能与用法示例
2017/03/31 Javascript
nodejs操作mysql实现增删改查的实例
2017/05/28 NodeJs
为vue-router懒加载时下载js的过程中添加loading提示避免无响应问题
2018/04/03 Javascript
vue router动态路由下让每个子路由都是独立组件的解决方案
2018/04/24 Javascript
js实现抽奖的两种方法
2020/03/19 Javascript
[03:42]2018完美盛典-《加冕》
2018/12/16 DOTA
基于scrapy实现的简单蜘蛛采集程序
2015/04/17 Python
Python中int()函数的用法浅析
2017/10/17 Python
Pycharm设置utf-8自动显示方法
2019/01/17 Python
python 实现将Numpy数组保存为图像
2020/01/09 Python
手把手教你安装Windows版本的Tensorflow
2020/03/26 Python
Python 实现二叉查找树的示例代码
2020/12/21 Python
一款纯css3实现的响应式导航
2014/10/31 HTML / CSS
CSS3 RGBA色彩模式使用实例讲解
2016/04/26 HTML / CSS
canvas实现烟花的示例代码
2020/01/16 HTML / CSS
英国No.1体育用品零售商:SportsDirect.com
2019/10/16 全球购物
计算机专业毕业生自我鉴定
2014/01/16 职场文书
事业单位辞职信范文
2014/01/19 职场文书
关于赌博的检讨书
2014/01/24 职场文书
大学生活自我评价
2014/04/09 职场文书
校庆团日活动总结
2014/08/28 职场文书
委托培训协议书
2014/11/17 职场文书
源码安装apache脚本部署过程详解
2022/09/23 Servers