在动态网面设计中很多都要涉及到对数据库的操作,但是有时跟据需要而改用其它后台数据库,就需要大量修改程序。这是一件枯燥、费时而且容易出错的功作。其实我们可以用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两个字段  

-----  




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 " 
";  
$ls_num = $test->dbnumrows($temp_result); //取得查询结果的记录数  
echo $ls_num;  
echo " 
";  
if (ls_num>0 )  
{  
$ls_col = $test->dbnumcols($db); //取得表的列数  
echo $ls_col;  
echo " 
";  
$cate_result=$test->dbfetchrow($temp_result,0);//取得记录数的第一行  
$hcid=$cate_result[0];// 取得name的值  
$hcate=$cate_result[1];//取得pay的值  
echo $hcid;  
echo " 
";  
echo $hcate;  
}  

?>  

-------------------------------------------------------------------------------- 
这就是一个简单的应用封装的类来完成对数据库的操作。如果要操作其它数据库只需要修改dbinterface类中的dbid变量即可