ADODB的数据库封包程序库_php文摘

PHP可以用最少的功夫以及最多的乐趣来建立动态的网站,要建立动态网站我们需要使用数据库来撷取登入帐号资讯、散布动态新闻、储存讨论区的文章。就以使用最通用的MySQL资料来说,你们公司已经完成了如此神奇的工作,让你们的网站比你们所能想像的还要出名。接著你们也发现MySQL无法应付实际的工作量了,是该更换数据库系统的时候了。

不幸地,在PHP中所有数据库的存取都有些微的不同。与MySQL连结你要使用 mysql_connect(),当你决定升级到Oracle或Microsoft SQL Server时,你必须分别改用ocilogon() 或 mssql_connect()。更糟糕的是不同连结所使用的参数也都不一样,有的数据库说po-tato(马铃薯的发音),别的数据库又说pota-to(马铃薯的另一个发音),喔…..天啊。

我们不要放弃
当你需要确保你程式的可携性的时候,一个叫做ADODB的数据库封包程序库已经出现了。它提供了共通的应用程序介面来跟所有支援的数据库沟通,因此你无须放弃!

ADODB是Active Data Object DataBase的缩写(很抱歉!玩电脑的有时候不是很有原创性)。ADODB目前支援MySQL、PostgreSQL、Oracle、Interbase、Microsoft SQL Server、Access、FoxPro、Sybase、ODBC及ADO,你可以从 http://php.weblogs.com/adodb下载 ADODB。

MySQL的例子
PHP中最通用的数据库是MySQL,所以我想你会喜欢下面的程序代码,它连结到localhost的MySQL服务器,数据库名称是mydab,并且执行一个SQL的select命令查询,查询结果会一列列地印出来。

 

上列的程序代码用颜色标出分段,第一段是连结的部分,第二段是执行SQL命令,最後一段则是显示栏位,while回圈扫描结果的每一列,而for回圈扫描到每列的栏位。

接下来是以ADODB的程序代码得到同样的结果:


现在改成指向Oracle数据库,程序代码只要修改第二行成为 NewADOConnection('oracle'),让我们看一下完整的程序代码...

与数据库连结


连结的程序代码比起原来MySQL的程序代码有老练一些,因为我们正是需要更老练些。在ADODB我们使用面向对象的方法来管理多样数据库的复杂性,我们用不同类型(class)来控制不同数据库。假如你不熟悉面向对象程式设计,别担心!所有的复杂事情都隐藏在NewADOConnection()函数之後。

为了节省记忆体,我们只载入与你所连结数据库相关的PHP程序代码,我们透过呼叫NewADOConnection(databasedriver)来完成这件事,合法的数据库驱动程式包含mysql,mssql,oracle,oci8,postgres,sybase,vfp,access,ibase以及许多其他的驱动程式。

接著我们透过呼叫NewADOConnection(),来从连结类型产生一个新的物件实体,最後我们使用$db->Connect()来连结数据库。

执行SQL命令



$result = $db->Execute("SELECT * FROM employees");
if ($result === false) die("failed");



直接传送SQL命令到服务器,当成功执行之後,Execute()将传回一个recordset物件,你可以如同上面所列来检查$result。

一个初学者容易混淆的议题是,在ADODB有两种类型的物件,连结物件以及recordset物件,我们何时用这些物件呢?

连结物件($db)是负责连结数据库,格式化你的SQL查询。而recordset物件($result)则是负责撷取结果并将回应资料规格化成文字或阵列。

唯一我需要增加的事情是,ADODB提供许多有用的函数来让INSERT及UPDATE命令更容易些,这点我们在进阶的章节会提到。

撷取资料


前面取得资料的范例很像从档案读资料,在每一行我们首先检查是否到了档案的结尾(EOF),若还没到结尾,回圈扫过每列中的栏位,然後移到下一行(MoveNext)接著重复同样的事情。

$result->fields[]阵列是由PHP数据库延伸系统所产生的,有些数据库延伸系统并不会以栏位名称建立该阵列的索引,要强迫以名称排序索引该阵列,使用$ADODB_FETCH_MODE的通用变数。

	$ADODB_FETCH_MODE = ADODB_FETCH_NUM;
	$rs1 = $db->Execute('select * from table');
	$ADODB_FETCH_MODE = ADODB_FETCH_ASSOC;
	$rs2 = $db->Execute('select * from table');
	print_r($rs1->fields); // shows array([0]=>'v0',[1] =>'v1')
	print_r($rs2->fields); // shows array(['col1']=>'v0',['col2'] =>'v1')

如同你所见的上面例子,两个recordset储存并使用不同的取用模式,当recordset由Execute()产生後再设定$ADODB_FETCH_MODE。

ADOConnection

连结到数据库的物件,执行SQL命令并且有一组工具函数来标准格式化SQL命令,比如关联与日期格式等命令。

其他有用的函数

$recordset->Move($pos)卷动目前的资料列,ADODB支援整个数据库往前卷动,有一些数据库并不支援往後的卷动,这倒不会是个问题,因为你能够用暂存纪录到快取来模拟往後卷动。

$recordset->RecordCount()传回SQL命令存取到的纪录笔数,有些数据库会因为不支援而传回-1。

$recordset->GetArray()以阵列的方式传回结果。

rs2html($recordset)函数将传进的recordset转为HTML的表格格式。下例中以粗体字显示相关用法:

  include('adodb.inc.php');
  include('tohtml.inc.php'); /* includes the rs2html function */
  $conn = &ADONewConnection('mysql');
  $conn->PConnect('localhost','userid','password','database');
  $rs = $conn->Execute('select * from table');
  rs2html($rs); /* recordset to html table */ 

还有许多其他有用的函数列示在文件之中,可从下列网址查得 http://php.weblogs.com/adodb_manual

进阶题材

新增及更新

假设你要新增下列资料到数据库中。

ID = 3
TheDate=mktime(0,0,0,8,31,2001) /* 31st August 2001 */
Note= sugar why don't we call it off

当你改用别的数据库,可能就没办法新增资料。

第一个问题是,每一个数据库各自有不同的内定日期格式,MySQL使用 YYYY-MM-DD 格式,而其他数据库则有不同的内定格式,ADODB提供DBDate()函数来转换不同数据库之间的日期内定格式。

次一个问题是单引号(don't)的表示法,在MySQL可以直接使用单引号(don't),但在其他数据库如Sybase、Access、 Microsoft SQL Server,则用两个单引号表示(don''t),qstr()函数可以解决此问题。

我们如何使用这些函数?就像这样:

$sql = "INSERT INTO table (id, thedate,note) values ("
  . $ID . ','
  . $db->DBDate($TheDate) .','
  . $db->qstr($Note).")";
$db->Execute($sql);

ADODB还有$connection->Affected_Rows()函数,传回受最後update或delete命令影响的资料列数,及$recordset->Insert_ID()函数,传回最後因insert命令而自动产生的资料列编号,预先提醒大家,没有任何数据库有提供这两个函数。

MetaTypes

你可以得到关於栏位的更多资讯,透过recordset的方法FetchField($fieldoffset)传回物件的3个属性:name,type,max_length。

举例说明:

$recordset = $conn->Execute("select adate from table");
$f0 = $recordset->FetchField(0);

结果$f0->name的内容是'adata',$f0->type将是'date',假如max_length不知道,其内容将会是-1。

处理不同数据库的一个问题是,每一个数据库对於相同的资料型态会有不同的称呼,比如timestamp型态在某数据库中称为datetime,而另一个数据库则称为time,所以ADODB提供MetaType($type,$max_length)函数来标准化下列的资料型态:

C: character and varchar types
X: text or long character (eg. more than 255 bytes wide).
B: blob or binary image
D: date
T: timestamp
L: logical (boolean)
I: integer
N: numeric (float, double, money)

在前面的例子中,



$recordset = $conn->Execute("select adate from table");
$f0 = $recordset->FetchField(0);
$type = $recordset->MetaType($f0->type, $f0->max_length);
print $type; /* should print 'D'

*/

Select命令的Limit及Top支援

ADODB有个$connection->SelectLimit($sql,$nrows,$offset)函数让你撷取recordset的部分集合,这是采用Microsoft产品中的SELECT TOP用法,及PostgreSQL与MySQL中的SELECT...LIMIT用法的优点,即使原来的数据库并没有提供此用法,本函数也模拟提供该使用方式。

快取支援

ADODB允许你在你的档案系统中暂存recordset的资料,并且在$connection->CacheExecute($secs2cache,$sql)及 $connection->CacheSelectLimit($secs2cache,$sql,$nrows,$offset)等设定的时间间隔到达之後,才真正去做数据库的查询以节省时间。

PHP4 Session支援

ADODB也支援PHP4 session handler,你可以存放你的session变数在数据库中,相关功能讯息请参考 http://php.weblogs.com/adodb-sessions

鼓励商业使用

假如你计划写商用的PHP应用软体来销售,你也可以使用ADODB,我们依据GPL来出版ADODB,也就是说你可以合法地在商用应用软体中引用,并保有你程序代码的所有权。强烈地鼓励ADODB的商业应用,我们自己内部也正以这个理由如此使用中。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索adodb连接数据库、文摘型数据库、文摘数据库、文摘型数据库有哪些、美国化学文摘ca数据库,以便于您获取更多的相关知识。

时间: 2024-11-18 23:45:40

ADODB的数据库封包程序库_php文摘的相关文章

PHP的开发框架的现状和展望_php文摘

PHP开发框架的现状和展望 /google 的广告条--> 引言: 随着Ruby on Rails的火爆,PHP这个流行的Web应用脚本语言也出现了大量的新一代开发框架.与此同时,国内PHP开发者也开始紧跟国外发展,推出了不同的开发框架. Ruby on Rails催生变革 在RoR流行之前,PHP领域也有不少开发框架,例如Mojavi.WACT.PHPMvc和Seagull等.这些框架虽然也采用了MVC模式.数据库抽象层等技术.但由于当时PHP本身不像现在这样流行,所以这些框架都没有得到大量应

php COM 连接ADODB.Connection数据库

$iishost = new com("npoint_m.host");   '加载组件 $r = $iishost->iisstate(10, 1, "", "", "", "");  '运行组件功能,返回参数 echo $r;  '返回参数 切换net版本为 netstate(ifid, dirname, netver, iissapp, bkwebip, bkpass, webfiletype,

用ADODB来让PHP操作ACCESS数据库的方法_php基础

这两天都在研究PHP, 主要是为了应付学习AJAX所需要的一些后台知识, 我对开源的东西总是有一种莫名的亲近感, 不要钱的东西果然人人爱啊  由于一般的空间MYSQL数据库都要单独花钱购买, 所以打算暂时先用ACCESS, 结果一查资料才头大, 原来PHP对每种不同的数据库的操作方法都不一样..... 于是搜了一些BLOG, 发现许多链接ACCESS的方法,但都不太尽如人意, 最后终于查到ADODB这个东东. 它是PHP的一个类, 内置了绝大部份你见过的数据库的操作方法. 比如PHP操作一个MY

php为什么选mysql作为数据库? Mysql 创建用户方法_php文摘

1.php为什么选mysql作为数据库?  2.Mysql数据库创建用户  本文主要写mysql创建用户的语句的区别,转自isher的blogspot,由于在写入时想到了为什么不换用其他数据库的时候,搜索了一下google为什么php会选择mysql作数据库,没有发现相关报道,边决定找到起因,同时此问题由我个人总觉得出,不代表广大php老鸟群们的意见,如有不周请指出  php为什么选mysql做为数据库?   mysql是最早的开源数据库(基于GPL,GPL2开源协议开发,享有共享原则,现有一部

php将access数据库转换到mysql数据库的方法_php技巧

本文实例讲述了php将access数据库转换到mysql数据库的方法.分享给大家供大家参考.具体分析如下: 本人采集来的数据是ACCESS的,但我的程序是mysql的,故写了一个程序,程序三步走,分享一下,喜欢操作数据库的朋友应该都会用到的. 1.连接mysql,代码如下: 复制代码 代码如下: $dbhost="localhost:3307";//服务器  $db="dataname";//数据库  $dbuser="root";//用户名 

adodb与adodb_lite之比较_php技巧

adodb与adodb_lite之比较   作者:欣然随风   adodb出世后得到许多PHPer的肯定和支持,树大招风不知什么时候出了个adodb_lite,说是对adodb缩水版,并且宣称不影响原版的基本功能.出于N种冲动,对其两种进行了一些简单的比较,其结果让人啼笑皆非.以下为对比结果:   adodb_lite缺少:   1.FetchNextObject();    // 这个影响倒不是很大   2.DBDate();                // 日期转换方法,没有怎么行!  

经典的PHPer为什么被认为是草根?_php文摘

PHPer是草根吗? 从PHP诞生之日起,PHP就开始在Web应用方面为广大的程序员服务.同时,作为针对Web开发量身定制的脚本语言,PHP一直秉承简单.开源的思想,这也使得PHP得以快速的发展,并且大力地推动Web2.0的出现与发展.但是,长期以来,PHPer(PHP Programmers)被认为是处于草根阶层的程序员,被认为是技术含量少,层次低的程序员.这点在国内尤其突出. 记得一个技术主管说过这样一个事情.他给一个程序员分配了PHP的开发任务,没想到那个程序员居然说:"我是学Java出身

用IE远程创建Mysql数据库的简易程序_php基础

小生近日来学习Mysql数据库,自己编写一个用IE远程创建Mysql数据库的简易程序,此程序适用与对Mysql数据库一无所知的人,可以轻松的创建Mysql数据库及数据库中的各种类型的表,而且完全是图形界面,你甚至可以一句sql语句都不知道,我编写的这个程序可能尚还十分简陋,在此我只想起一个抛砖引玉的作用,希望大家能不断完善此程序,做一个真正意义上的图形界面的Mysql管理器. 此程序共分两个文件: mkdb.htm:搜集使用者信息,给下面的.php文件使用. <HTML> <HEAD&g

PHP连接MYSQL数据库实例代码_php实例

具体代码如下所示: <?php //设置字符集 header('Content-Type: text/html; charset=utf8'); //连接数据库 $link = mysql_connect("localhost","root","123456"); if(!$link){ echo '数据库连接失败...<br>'; exit(-1); }else{ echo "数据库连接成功...<br>