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 相关文章推荐
dedecms系统常用术语汇总
Apr 03 PHP
php strstr查找字符串中是否包含某些字符的查找函数
Jun 03 PHP
php中使用preg_match_all匹配文章中的图片
Feb 06 PHP
浅析php fwrite写入txt文件的时候用 \r\n不能换行的问题
Aug 06 PHP
PHP检测字符串是否为UTF8编码的常用方法
Nov 21 PHP
跨浏览器PHP下载文件名中的中文乱码问题解决方法
Mar 05 PHP
PHP函数checkdnsrr用法详解(Windows平台用法)
Mar 21 PHP
老生常谈PHP位运算的用途
Mar 12 PHP
Yii2.0多文件上传实例说明
Jul 24 PHP
Redis在Laravel项目中的应用实例详解
Aug 11 PHP
php实现根据身份证获取精准年龄
Feb 26 PHP
深入浅析安装PhpStorm并激活的步骤详解
Sep 17 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中使用preg_match_all匹配文章中的图片
2013/02/06 PHP
解析php做推送服务端实现ios消息推送
2013/07/01 PHP
php转换颜色为其反色的方法
2015/04/27 PHP
php基于session实现数据库交互的类实例
2015/08/03 PHP
浅谈Laravel核心解读之Console内核
2018/12/02 PHP
PHP7内核CGI与FastCGI详解
2019/04/14 PHP
prototype 学习笔记整理
2009/07/17 Javascript
不提示直接关闭网页窗口的JS示例代码
2013/12/17 Javascript
JavaScript将数据转换成整数的方法
2014/01/04 Javascript
jquery根据锚点offset值实现动画切换
2014/09/11 Javascript
javascript生成不重复的随机数
2015/07/17 Javascript
深入解读JavaScript中的Hoisting机制
2015/08/12 Javascript
JS实现仿Windows7风格的网页右键菜单效果代码
2015/09/11 Javascript
分享我对JS插件开发的一些感想和心得
2016/02/04 Javascript
仅一个form表单 js实现注册信息依次填写提交功能
2016/06/12 Javascript
浅谈JavaScript 覆盖原型以及更改原型
2016/08/31 Javascript
浅谈js内置对象Math的属性和方法(推荐)
2016/09/19 Javascript
Bootstrap导航条鼠标悬停下拉菜单
2017/01/04 Javascript
深入理解React高阶组件
2017/09/28 Javascript
利用SpringMVC过滤器解决vue跨域请求的问题
2018/02/10 Javascript
详解webpack运行Babel教程
2018/06/13 Javascript
在博客园博文中添加自定义右键菜单的方法详解
2020/02/05 Javascript
vue实现几秒后跳转新页面代码
2020/09/09 Javascript
[02:25]DOTA2英雄基础教程 熊战士
2014/01/03 DOTA
浅谈python新式类和旧式类区别
2019/04/26 Python
python求一个字符串的所有排列的实现方法
2020/02/04 Python
使用Python爬取小姐姐图片(beautifulsoup法)
2021/02/11 Python
阿联酋彩妆品牌:OUD MILANO
2019/10/06 全球购物
计算机应用专业学生的自我评价分享
2013/11/03 职场文书
迅雷Cued工作心得体会
2014/01/27 职场文书
黄继光的英雄事迹材料
2014/02/13 职场文书
销售员工作检讨书(推荐篇)
2014/10/18 职场文书
岗位职责范本大全
2015/02/26 职场文书
财务总监岗位职责范本
2015/04/03 职场文书
建党伟业电影观后感
2015/06/01 职场文书
员工考勤管理制度
2015/08/06 职场文书