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 相关文章推荐
配置支持SSI
Nov 25 PHP
解析使用substr截取UTF-8中文字符串出现乱码的问题
Jun 20 PHP
解决PHP4.0 和 PHP5.0类构造函数的兼容问题
Aug 01 PHP
php基础教程
Aug 26 PHP
WordPress中对访客评论功能的一些优化方法
Nov 24 PHP
PHP发送AT指令实例代码
May 26 PHP
PHP实现上传多文件示例代码
Feb 20 PHP
Laravel 5.4.36中session没有保存成功问题的解决
Feb 19 PHP
php通过各种函数判断0和空
Jul 04 PHP
PHP实现从PostgreSQL数据库检索数据分页显示及根据条件查找数据示例
Jun 09 PHP
PHP精确到毫秒秒杀倒计时实例详解
Mar 14 PHP
laravel5.6框架操作数据curd写法(查询构建器)实例分析
Jan 26 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数据缓存的使用说明
2013/05/10 PHP
PHP基于CURL进行POST数据上传实例
2014/11/10 PHP
laravel 输出最后执行sql 附:whereIn的使用方法
2019/10/10 PHP
二行代码解决全部网页木马
2008/03/28 Javascript
apycom出品的jQuery精美菜单破解方法
2011/02/18 Javascript
jQuery的each终止或跳过示例代码
2013/12/12 Javascript
基于jquery ui的alert,confirm方案(支持换肤)
2015/04/03 Javascript
JavaScript基础语法之js表达式
2016/06/07 Javascript
微信小程序 教程之模块化
2016/10/17 Javascript
利用纯Vue.js构建Bootstrap组件
2016/11/03 Javascript
JS中关于事件处理函数名后面是否带括号的问题
2016/11/16 Javascript
Angularjs根据json文件动态生成路由状态的实现方法
2017/04/17 Javascript
vue.js中v-on:textInput无法执行事件问题的解决过程
2017/07/12 Javascript
重学JS之显示强制类型转换详解
2019/06/30 Javascript
微信小程序云函数添加数据到数据库的方法
2020/03/04 Javascript
Vue将props值实时传递 并可修改的操作
2020/08/09 Javascript
[44:15]DOTA2上海特级锦标赛主赛事日 - 5 败者组决赛Liquid VS EG第二局
2016/03/06 DOTA
python脚本实现验证码识别
2018/06/07 Python
python3射线法判断点是否在多边形内
2019/06/28 Python
Python实现12306火车票抢票系统
2019/07/04 Python
django 基于中间件实现限制ip频繁访问过程详解
2019/07/30 Python
Python ArgumentParse的subparser用法说明
2020/04/20 Python
Python爬取12306车次信息代码详解
2020/08/12 Python
Pycharm创建文件时自动生成文件头注释(自定义设置作者日期)
2020/11/24 Python
茵宝(Umbro)英国官方商店:英国足球服装生产商
2016/12/29 全球购物
GetYourGuide台湾:预订旅游活动、景点和旅游项目
2019/06/10 全球购物
中间件分为哪几类
2012/03/14 面试题
常见的软件开发流程有哪些
2015/11/14 面试题
合伙经营协议书范本
2014/09/13 职场文书
运动会报道稿300字
2014/10/02 职场文书
银行自荐信怎么写
2015/03/05 职场文书
公司市场部岗位职责
2015/04/15 职场文书
运动会闭幕式通讯稿
2015/07/18 职场文书
2015年计算机教师工作总结
2015/07/22 职场文书
2017元旦、春节期间廉洁自律承诺书
2016/03/25 职场文书
100句人生哲理语录集锦:强者征服今天,懒汉坐等明天
2019/10/18 职场文书