admin 管理员组

文章数量: 1184232


2024年4月24日发(作者:clust)

维普资讯

第23卷总第44期 

2 002年6月 

西北民族学院学报(自然科学版) 

 Science)Journal of Northwest Minoriites Uaiversity(Natural V01.23.No.2 

June。2002 

用PHP访问数据库的通用方法 

冯祖洪 

(西北第二民族学院网络计算中心,宁夏银川750021) 

[摘要]介绍了用P 程序与多种数据库连接的方法,给出了可与多种数据库连接的通用程序flak.h 

pl1p和调用flink.pl1p的例子.用这种方法,P} 脚本程序能非常方便地连接、访问不同的数据库. 

[关键词]数据库;PHP;Mysql;Sybase 

[中图分类号]TP311.131 [文献标示码]A 

|, 

[文章编号]1009—2102(2002)02—0031—06 

口 

在已建成的信息管理系统应用中,有各种操作系统平台与数据库管理系统的组合,既有Windows NT/ 

2000与ACCESS、Windows Nr/2000与MS SOL SERVER、Windows Nr/2000与ORACLE等的组合,也有 

UNIX与ORACLE、UNIX与SYRASE、UNIX与DB2、Linux与ORACLE、Lhaux与SYBASE、Linux与MySQL 

等的组合.有些较大单位内部,例如大学,各部门选择的操作系统平台与数据库管理系统组合也不同,笔者所 

在学校网络中心选择的操作系统平台与数据库管理系统组合就不同于教务处、财务处、图书馆等部门而选择 

的.在这种由不同平台、不同数据库管理系统组成的复杂网络环境里,因各数据库管理系统的连接方法不同。 

常常需要信息系统的开发人员熟知各种平台下各种数据库管理系统的连接访问方法。在一定程度上加大了 

信息系统的开发难度.本文将首先介绍P} 与各种数据库的连接方法,然后将它们综合起来,开发出一个通 

用的模块,用户只需调用一个函数就能很方便地连接、访问各种数据库. 

I PHP与各主要数据库的连接方法 

P 是一种可以跨平台的脚本语言,用户在一种系统平台上开发的脚本语言程序可以不加修改地在另 

个系统平台上运行,因而它是当前用于开发WEB应用程序最流行的脚本语言之一.P} 提供了与各种数 

据库连接的函数,下面介绍几种主要数据库的连接函数.注意,在使用这些函数前,运行PHP脚本语言程序 

的WEB服务器上应安装有对应数据库的客户端软件.当WEB服务器的运行平台为UNIX、Linu)【时,为了与 

S MSOL Server数据库服务器建立连接,需在WEB服务器端安装Sybase数据库客户端软件. 

1.1 MS SOL Serve.1-的相关函数 int mssql-cormect([string se】 m蜘e[,strig unSetTla/ne[,strig n

pa ]]]) 

rnssql・connect()函数用于建立与MS SOL Server服务器的连接,如函数返回一个正数型的连接标识。表明 

连接成功;否则,表明连接失败. 

hat mssql-select—db(string database-name[,int link-identiifer]) 

mssql-selcte.db()函数设置与指定数据库连接标识相关的当前活动数据库.如缺省连接标识,则使用前面 

已经建立的连接;如前面没有建立连接,则函数试图建立一个连接后再设置与指定数据库连接相关的当前 

[收稿日期]2002—02—28 

[作者简介] ̄(1956--),男,江苏无锡人,副教授,主要从事计算机网络的应用与研究. 

31— 

维普资讯

精 库. 

1.2 Mysq'的相关函数 re ̄?Klrce mysql—connect(string[se ],string[usernalTl ̄J, cl q [pax-:word]) 

mysql-oclmect()函数用于建立与Mysql服务器的连接,如连接成功,函数返回一个连接标识;否则,返回 

FALSE,表明连接失败.这里,参数s ̄-ver可以写成“hosmame:Fort”的形式.如果函 ・喝用中:t填写参数 

seⅣer.则缺省为server=‘localhost:3306’,缺省用户名为数据库服务器进程的拥有者. 

t ̄ ̄ol mysql一 ̄lcet—db(string database-rL: ̄'ne,resource[1ink—identifier])mysql-sdect—db()函学。的作用 会类似 

于mssq1 sdect—db(). 

1.3 Orade 8的相关函数 int()cILog0n(strign∞蛐脚e,strign password[,stri, ̄g ah1、 

OClLogon()用C ̄I8(orade8 Can—interface)建立与Oracle 8或Orade 7数据库的连接使用O('I8需要 

Orade8客户库的支持,并需要正确设置环境变量ORACLE-HOME、ORACLF—SID、l』).PREI f 、In 

LIBRAR Y_PATH、NLS-I ̄MN'G、ORA- ̄.S33的值.函数调用成功返回连接标识. 

1.4¥yhase的相关函数 int sy"base-ocnect(strign servernaiTle,strign usernalne,strign pa ̄word i

string 

charset]) 

sybase-,conect()建立与Sybase服务器的连接. 

foal sytme-sdect—db(strign database-name,int bnk—identiifre) 

sybase-select—db()函数的作用完全类似于mssql—selcet—db(). 

1.5 ODBC的相关函数 int odbc—ocnnect(strign dm,strign user,strign password[,int Clit23or—type]) 

Odbc—connect()通过数据源与某种数据库服务器建立连接.调用函数时,通常情况下,第四个参数可以省 

略.函数调用成功,则返回连接标识;否则,返回FALSE. 

int Od})c—autocommit(int connection—id[,int OnOff]) 

od autocornmit()用于设置对应某个连接标识自动提交事务的状态.缺省情况下,对应一个连接标识 

的自动提交事务处于打开状态. 

2 PHP与各种主要数据库连接与访问的通用程序flink.php 

下面综合利用上面给出的函数,给出PHP与各种主要数据库通用连接方法的程序flink.php 

lfink.php的代码如下: 

<?phi 

fI』1. :!)-ocnect(¥dbtype,¥dbinfo,¥sq1) 

¥sql1=¥ml; 

¥strl=trim(¥sql1); 

/★这里¥dbinfo是一个PHP数组,含有hostname,dbuser,dbpassword,dbname)等信息★/ 

{switch(¥dbtype) 

{ 

m ̄cll’: //xq应数据库为Mysql 

¥flink=mysql—ocnect(¥dbinfo[0],¥dbinfo[1],¥dbinfo[2]); 

if(!¥flink) 

{ 

¥d ̄error=“无法连接到所指定的数据库”; 

exit(); 

}dse{ 

mysq!一selcet—db(¥dbinfo[3],¥flink); 

if(substr(strl,0,6):=“select”){ 

¥resultl=mysql—query(¥sql1,¥flink); 

32— 

维普资讯

¥ib=0; 

while(¥row1=mysql—fetch—array(¥resAt1)){ 

¥coll=mysql—num—fields(¥result1); 

for(¥i=0;¥i<¥ooll;¥i=¥i+1){ 

¥all[¥ib][¥i]=¥rowl[¥i]; 

} 

¥ib=¥ib+1; 

} 

return(¥al1); 

}else{ 

¥re ̄altl=mysql—query(¥sqll,¥flink); 

} 

break; 

} 

case‘odbc’: //对应ODI 

¥flink=odbe-connect(¥dbinfo[0],¥dbinfo[1],¥dbinfo[2]); 

if(!¥flink) 

{ 

¥db-error==“无法连接到所指定的数据库”; 

exit(); 

}else{ 

odbe—autocommit(¥flink,‘off’); 

if(substr(strl,0,6)==“select”){ 

¥result1=odbe—exec(¥flink,¥sql1); 

¥ib=0; 

while(¥row1=odbe—fetch—rOW(¥re ̄alt1)){ 

¥coll=081312-nLfn—fields(¥re.At1); 

f0r(¥i=0;¥i<¥coll;¥i=¥i+1){ 

¥all[¥ib][¥i]=¥row1[¥i]; 

} 

¥ib=¥ib+1; 

} 

return(¥al1); 

}else{ 

¥result1=081312-exec(¥flink,¥sql1); 

} 

break; 

} 

case‘oracle8’: //对应数据库为Oracle 

¥flink=(X;ILogon(¥dbinIo[0],¥dbinfo[1],¥dbinfo[2]); 

if(!¥mnk) 

{ 

¥db-error=“无法连接到所指定的数据库”; 

33— 

维普资讯

exit(); 

I else I 

¥strat=OCIParse(¥flL,ak,¥sql1); 

if(龇bs廿(s廿1,0,6)==“select”)I 

(X3IF_,xecute(¥stutr); 

¥ib=0; 

while(OCIFetch(¥strat)){ 

¥ooll=OCINumCols(¥sturt); 

f∞(¥i=0;¥i<¥coll;¥i=¥i+1)I 

¥all[¥ib][¥i]=OCIResult(¥strnt,¥i+1); 

I 

¥ib=¥ib+1; 

I 

I' ̄tulTI(¥af1); 

IelseI 

(X3IF_,xecute(¥蛐mt); 

I 

break; 

I 

cs,se‘ ’

: 

//对应数据库为Sybase 

¥flink sybase-connect(¥db ̄o[0],¥dbinfo[1],¥dbinfo[2]); 

if(!¥flink) 

I 

¥rib-error=“无法连接到所指定的数据库”; 

exit(); 

I else I 

sybase-select-db(¥dblnfo[3],¥flink); 

if(subs ̄(sM,0,6)==“select”)I 

¥result1=sybase-query(¥sql1,¥flink); 

¥ib=0; 

while(¥row1=sybase-fetch—array(¥r ̄alt1))I 

¥ooll=sybase-num-fidds(¥re ̄alt1); 

f∞(¥i:0;¥i<¥coll;¥i=¥i+1)I 

¥all[¥ib][¥i]=¥row1[¥i]; 

I 

¥ib=¥ib+1; 

I 

I' ̄tulTI(¥al1); 

IelseI 

¥re ̄altl=Sjd)as qu臼r)r(¥sql1,¥flink); 

I 

break; 

I 

---——

34・--—— 

维普资讯

o_.8.se‘mssql’: 

if(!¥mr1l【) 

//对应数 库为MSSOLServer 

¥flhak=mssql-connect(¥dbi ̄o[O],¥dbinfo[1],¥dbinfo[2】); 

{ 

¥db-error=“无法连接到所指定的数据库”; 

e】dt(); 

}else{ 

mssql-sdect db(¥dbinfo[3],¥flink); 

if(substr(strl,0,6)==“select”){ 

¥result1=mssql—query(¥sql1,¥flink); 

¥ib=0; 

while(¥row1=mssql-fetch-array(¥result1)){ 

¥coll=mssql—num-fidds(¥result1); 

for(¥i=0;¥i<¥toll;¥i=¥i+1){ 

¥af1[¥ib][¥i]=¥row1[¥i]; 

} 

¥ib=¥ib+1; 

} 

l' ̄ta.1lTt(¥af1); 

}else{ 

¥result1=mssql—query(¥sql1,¥flink); 

} 

break; 

} 

default: 

echo“对不起!你输入的数据库类型暂不支持!”; 

break; 

} 

} 

?> 

利用上述flLnk.pap中的函数fdb-connect(),可以直接连接访问数据库,结果以数组形式返回

3调用flhak.pap的方法和例子 

. 

函数fdb-eonnect(¥dbtype,¥dbinfo,¥ )有三个参数:第一个参数为数据库类型;第二个参数是个数 

组,对于Mysql、MSSOL Server及Syba. ̄数据库,¥dbinfo[O]、¥dbirdo[1]、¥dbinfo[2]、¥db [3]的内容分 

别为服务器的名称、用户名称、口令和数据库库名;对于 ,¥dbinfo[O]、¥dbirdo[1]、¥dbinfo[2]的内容 

分别为数据源的名称、用户名称和口令;对于O ̄d.de 8,通常只需填入二个参数¥dbinfo[O]、¥dbinfo[1]

内容 

分别为用户名称、口令;第三个参数为访问数据库的 语句字符串.现以Mysql为例

给出调用的例子: 

<?pap 

¥db-1=“mysql”: 

¥db[O]=“fserverl”; 

¥rib-2[1]=“fzh”; 

¥db-212]=“fzh一1”; 

//fser,,e ̄l是数据库服务器的名称 

//毛 为用户的名称 

//f ̄-i是用户fzh的I:1令 

35— 

维普资讯

¥d 2[3]=“fzh-2”; 

/*下面语句将fcs-1.php插入 

Ilfzh-2:g--+Mysql数据库的名称 

*/ 

¥sql=”select*fromtable1”: 

require(“flink.php”); 

/*与数据库建立连接,将结果返回到数组¥gh中*/ 

¥gh:fdb-eonnect(¥db-1,¥db-2,¥sq1); 

/*结果显示*/ 

foreach(¥gh aS¥舀){ 

foreach(¥翻aS¥gi){ 

echo¥gi.“\n”; 

I 

echo“<br>\n”; 

I 

?> 

参考文献: 

[1]薛军超.Mysql网络数据库开发[M].北京:人民邮电出版社,2001

. 

[2]罗明,檀文钊.跨平台的PHP+Mysqi[M].北京:清华大学出版社

2001 

[3]http://www.php.net[Z]. 

An Available Method of Accessing Some 

Different Database with PHP 

FENG Zu-hong 

(NetComputerCenter ofthe SecondNorthwest InstituteForNatict ̄mlities,Y ̄mehuanNingxia750021

China) 

[Abstract]This paper presents an available 1TIethod and all example of acceSsing Some出fferent 

database th P .With this method,we can access different database conveniently

. 

[Key words]database;PHP;Mysql;Sybase 

36— 


本文标签: 数据库 连接 函数 平台 服务器