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中break及continue两个流程控制指令区别分析
Apr 18 PHP
php中substr()函数参数说明及用法实例
Nov 15 PHP
php5.3不能连接mssql数据库的解决方法
Dec 27 PHP
搭建基于Docker的PHP开发环境的详细教程
Jul 01 PHP
PHP获取指定月份第一天和最后一天的方法
Jul 18 PHP
PHP各种异常和错误的拦截方法及发生致命错误时进行报警
Jan 19 PHP
PHP对XML内容进行修改和删除实例代码
Oct 26 PHP
详解yii2使用多个数据库的案例
Jun 16 PHP
thinkPHP框架中执行事务的方法示例
May 31 PHP
Laravel框架实现利用监听器进行sql语句记录功能
Jun 06 PHP
php设计模式之备忘模式分析【星际争霸游戏案例】
Mar 24 PHP
TP5框架页面跳转样式操作示例
Apr 05 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
自制短波长线天线频率预选器 - 成功消除B2K之流的镜像
2021/03/02 无线电
索尼SONY SRF-S83/84电路分析和打磨
2021/03/02 无线电
4.与数据库的连接
2006/10/09 PHP
利用PHP实现短域名互转
2013/07/05 PHP
关于PHP语言构造器介绍
2013/07/08 PHP
Yii使用CLinkPager分页实例详解
2014/07/23 PHP
PHP中文竖排转换实现方法
2015/10/23 PHP
9个比较实用的php代码片段
2016/03/15 PHP
php闭包中使用use声明变量的作用域实例分析
2018/08/09 PHP
php中array_fill函数的实例用法
2021/03/02 PHP
javascript 系统文件夹文件操作及参数介绍
2013/01/08 Javascript
jQuery拖拽 &amp; 弹出层 介绍与示例
2013/12/27 Javascript
jquery实现的3D旋转木马特效代码分享
2015/08/25 Javascript
JavaScript基本的输出和嵌入式写法教程
2015/10/20 Javascript
JavaScript判断按钮被点击的方法
2015/12/13 Javascript
jquery显示隐藏元素的实现代码
2016/05/19 Javascript
JavaScript生成带有缩进的表格代码
2016/06/15 Javascript
JavaScript提高网站性能优化的建议(二)
2016/07/24 Javascript
基于jQuery实现发送短信验证码后的倒计时功能(无视页面关闭)
2016/09/02 Javascript
详解如何在你的Vue项目配置vux
2018/06/04 Javascript
Webpack之tree-starking 解析
2018/09/11 Javascript
基于elementUI使用v-model实现经纬度输入的vue组件
2019/05/12 Javascript
VueCli3.0中集成MockApi的方法示例
2019/07/05 Javascript
Python的爬虫框架scrapy用21行代码写一个爬虫
2017/04/24 Python
Python多线程原理与用法详解
2018/08/20 Python
对python3中pathlib库的Path类的使用详解
2018/10/14 Python
对python pandas 画移动平均线的方法详解
2018/11/28 Python
Origins加拿大官网:雅诗兰黛集团高端植物护肤品牌
2017/11/19 全球购物
《高尔基和他的儿子》教学反思
2014/04/09 职场文书
法定代表人身份证明书
2014/09/10 职场文书
大班上学期个人总结
2015/02/13 职场文书
好好学习保证书
2015/02/26 职场文书
闪闪的红星观后感
2015/06/08 职场文书
nginx前后端同域名配置的方法实现
2021/03/31 Servers
详解TS数字分隔符和更严格的类属性检查
2021/05/06 Javascript
Java详细解析==和equals的区别
2022/04/07 Java/Android