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 相关文章推荐
php 变量定义方法
Jun 14 PHP
php 正则表达式小结
Aug 31 PHP
深入PHP curl参数的详解
Jun 17 PHP
hadoop中一些常用的命令介绍
Jun 19 PHP
一个PHP的ZIP压缩类分享
May 04 PHP
ThinkPHP的截取字符串函数无法显示省略号的解决方法
Jun 25 PHP
简单谈谈 php 文件锁
Feb 19 PHP
PHP生成(支持多模板)二维码海报代码
Apr 30 PHP
php微信开发之关注事件
Jun 14 PHP
thinkPHP框架实现多表查询的方法
Jun 14 PHP
如何优雅的使用 laravel 的 validator验证方法
Nov 11 PHP
PHP5中使用mysqli的prepare操作数据库的介绍
Mar 18 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/02/03 PHP
使用php实现下载生成某链接快捷方式的解决方法
2013/05/07 PHP
php如何连接sql server
2015/10/16 PHP
PHP解压tar.gz格式文件的方法
2016/02/14 PHP
PHP简单判断手机设备的方法
2016/08/23 PHP
PHP静态延迟绑定和普通静态效率的对比
2017/10/20 PHP
TP5(thinkPHP5框架)实现显示错误信息及行号功能的方法
2019/06/03 PHP
Laravel框架创建路由的方法详解
2019/09/04 PHP
使用Apache的rewrite
2021/03/09 Servers
Javascript级联下拉菜单以及AJAX数据验证核心代码
2013/05/10 Javascript
js兼容的placeholder属性详解
2013/08/18 Javascript
jquery中的常用事件bind、hover、toggle等示例介绍
2014/07/21 Javascript
JavaScript实现为指定对象添加多个事件处理程序的方法
2015/04/17 Javascript
基于Jquery实现仿百度百科右侧导航代码附源码下载
2015/11/27 Javascript
浅谈javascript中的加减时间
2016/07/12 Javascript
JQuery学习总结【二】
2016/12/01 Javascript
vuejs指令详解
2017/02/07 Javascript
关于Stream和Buffer的相互转换详解
2017/07/26 Javascript
js如何编写简单的ajax方法库
2017/08/02 Javascript
js精确的加减乘除实例
2017/11/14 Javascript
angularJS实现不同视图同步刷新详解
2018/10/09 Javascript
[01:02:17]2014 DOTA2华西杯精英邀请赛 5 24 DK VS VG
2014/05/26 DOTA
[01:02:09]Liquid vs TNC 2019国际邀请赛淘汰赛 胜者组 BO3 第二场 8.21
2020/07/19 DOTA
python实现发送和获取手机短信验证码
2016/01/15 Python
Python3使用requests包抓取并保存网页源码的方法
2016/03/15 Python
深入理解Python3中的http.client模块
2017/03/29 Python
Python操作SQLite/MySQL/LMDB数据库的方法
2019/11/07 Python
如何将 awk 脚本移植到 Python
2019/12/09 Python
神经网络训练采用gpu设置的方式
2021/03/03 Python
求职信范文怎么写
2014/01/29 职场文书
经理秘书求职自荐信范文
2014/03/23 职场文书
多媒体编辑专业毕业生求职信
2014/06/13 职场文书
齐云山导游词
2015/02/06 职场文书
优秀教师个人总结
2015/02/11 职场文书
浅谈Golang 切片(slice)扩容机制的原理
2021/06/09 Golang
Java实现添加条码或二维码到Word文档
2022/06/01 Java/Android