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源码之 ext/mysql扩展部分
Jul 17 PHP
PHP技术开发技巧分享
Mar 23 PHP
php下封装较好的数字分页方法
Nov 23 PHP
CodeIgniter生成网站sitemap地图的方法
Nov 13 PHP
利用谷歌 Translate API制作自己的翻译脚本
Jun 04 PHP
php使用timthumb生成缩略图的方法
Jan 22 PHP
Zend Framework教程之Application和Bootstrap用法详解
Mar 10 PHP
浅析Yii2集成富文本编辑器redactor实例教程
Apr 25 PHP
php函数传值的引用传递注意事项分析
Jun 25 PHP
PHP中new static()与new self()的比较
Aug 19 PHP
PHP常用算法和数据结构示例(必看篇)
Mar 15 PHP
详谈配置phpstorm完美支持Codeigniter(CI)代码自动完成(代码提示)
Apr 07 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/06/23 PHP
php实现cc攻击防御和防止快速刷新页面示例
2014/02/13 PHP
PHP单文件上传原理及上传函数的封装操作示例
2019/09/02 PHP
Javascript里使用Dom操作Xml
2006/09/20 Javascript
this[] 指的是什么内容 讨论
2007/03/24 Javascript
js jquery做的图片连续滚动代码
2008/01/06 Javascript
jQuery 解析xml文件
2009/08/09 Javascript
js如何判断不同系统的浏览器类型
2013/10/28 Javascript
基于jQuery实现Div窗口震动特效代码-代码简单
2015/08/28 Javascript
基于Jquery实现万圣节快乐特效
2015/11/01 Javascript
node.js回调函数之阻塞调用与非阻塞调用
2015/11/13 Javascript
AngularJS优雅的自定义指令
2016/07/01 Javascript
jQuery实现的瀑布流加载效果示例
2016/09/13 Javascript
Javascript实现base64的加密解密方法示例
2017/06/27 Javascript
在vue项目中引入highcharts图表的方法(详解)
2018/03/05 Javascript
javascript sort()对数组中的元素进行排序详解
2019/10/13 Javascript
JS设置自定义快捷键并实现图片上下左右移动
2019/10/17 Javascript
详解vue 组件注册
2020/11/20 Vue.js
Python编程实现生成特定范围内不重复多个随机数的2种方法
2017/04/14 Python
Python中元组,列表,字典的区别
2017/05/21 Python
Python2.7读取PDF文件的方法示例
2017/07/13 Python
Python中的并发处理之asyncio包使用的详解
2018/04/03 Python
TensorFlow 模型载入方法汇总(小结)
2018/06/19 Python
python3使用QQ邮箱发送邮件
2020/05/20 Python
使用Django开发简单接口实现文章增删改查
2019/05/09 Python
Python多进程方式抓取基金网站内容的方法分析
2019/06/03 Python
用Python获取摄像头并实时控制人脸的实现示例
2019/07/11 Python
python MultipartEncoder传输zip文件实例
2020/04/07 Python
Python接口开发实现步骤详解
2020/04/26 Python
教师自我评价范文
2013/12/16 职场文书
酒店大堂副理的职责范文
2014/02/13 职场文书
实用的简历自我评价
2014/03/06 职场文书
高中学生会竞选演讲稿
2014/08/25 职场文书
党的群众路线对照检查材料
2014/08/27 职场文书
统计工作个人总结
2015/03/03 职场文书
导游词之清晏园
2019/11/22 职场文书