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.ini中文版
Oct 09 PHP
PHP函数篇之掌握ord()与chr()函数应用
Dec 05 PHP
PHP正则表达式 /i, /is, /s, /isU等介绍
Oct 23 PHP
php计划任务之验证是否有多个进程调用同一个job的方法
Dec 07 PHP
Symfony2中被遗弃的getRequest()方法分析
Mar 17 PHP
浅析Yii2 gridview实现批量删除教程
Apr 22 PHP
关于php中一些字符串总结
May 05 PHP
WordPress中设置Post Type自定义文章类型的实例教程
May 10 PHP
php连接oracle数据库的方法(测试成功)
May 26 PHP
PHP房贷计算器实例代码,等额本息,等额本金
Apr 01 PHP
PHP 中使用explode()函数切割字符串为数组的示例
May 06 PHP
php实现通过stomp协议连接ActiveMQ操作示例
Feb 23 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
yii2框架中使用下拉菜单的自动搜索yii-widget-select2实例分析
2016/01/09 PHP
Zend Framework实现多服务器共享SESSION数据的方法
2016/03/22 PHP
php版微信公众平台接口开发之智能回复开发教程
2016/09/22 PHP
PHP7扩展开发之hello word实现方法详解
2018/01/15 PHP
如何让PHP编码更加好看利于阅读
2019/05/12 PHP
用javascript getComputedStyle获取和设置style的原理
2008/10/10 Javascript
jquery实现简单的拖拽效果实例兼容所有主流浏览器(优化篇)
2013/06/28 Javascript
js中的如何定位固定层的位置
2014/06/15 Javascript
AngularJs $parse、$eval和$observe、$watch详解
2016/09/21 Javascript
Node.js学习教程之HTTP/2服务器推送【译】
2017/10/31 Javascript
vue init webpack myproject构建项目 ip不能访问的解决方法
2018/03/20 Javascript
详解性能更优越的小程序图片懒加载方式
2018/07/18 Javascript
vue-router之解决addRoutes使用遇到的坑
2020/07/19 Javascript
Vue-cli打包后如何本地查看的操作
2020/09/02 Javascript
python中使用sys模板和logging模块获取行号和函数名的方法
2014/04/15 Python
python通过pil模块获得图片exif信息的方法
2015/03/16 Python
pytorch 加载(.pth)格式的模型实例
2019/08/20 Python
django之导入并执行自定义的函数模块图解
2020/04/01 Python
python 模拟登录B站的示例代码
2020/12/15 Python
python画图时设置分辨率和画布大小的实现(plt.figure())
2021/01/08 Python
css3过渡_动力节点Java学院整理
2017/07/11 HTML / CSS
使用css3实现的tab选项卡代码分享
2014/12/09 HTML / CSS
Calzedonia美国官网:意大利风格袜子、打底裤和沙滩装
2018/07/19 全球购物
美国折扣香水网站:The Perfume Spot
2020/12/12 全球购物
个人自我鉴定范文
2013/10/04 职场文书
两年的个人工作自我评价
2014/01/10 职场文书
竞争上岗实施方案
2014/03/21 职场文书
大学生入党积极分子自我评价
2014/09/20 职场文书
法院授权委托书格式
2014/09/28 职场文书
团员个人总结
2015/02/26 职场文书
《叶问2》观后感
2015/06/15 职场文书
人力资源部工作计划
2019/05/14 职场文书
在Spring-Boot中如何使用@Value注解注入集合类
2021/08/02 Java/Android
Redis如何实现分布式锁
2021/08/23 Redis
Spring Boot项目传参校验的最佳实践指南
2022/04/05 Java/Android
阿里云k8s服务升级时502错误 springboot项目应用
2022/04/09 Servers