麻辣堂|资源主站|开发论坛|在线手册
首页 Apache Linux Java MySQL 注册帮助 
PHP项目开发组是PHP开发资源网于2007组年建成立的项目开发团队,目前核心开发成员有27人, 项目协作成员8名.下设7个开发组,主要承接大/中型网站项目开发任务。

    由于开发任务较多,人员比较紧张,现面向社会招聘全职或者兼职开发人员,不管你是在校大学生,还是全职开发人员,以及SOHO都可以联系本站,我们可以长期合作,并为您带来丰厚的报酬。
  您现在的位置:PHP开发资源网 > 麻辣堂 > 详细资料
待解决
Adodb 入门 简体版
悬赏分:20 - 2007年08月17日

ADODB 入门 繁体版 英文原文 You say eether and I say eyether, You say neether and I say nyther; Eether, eyether, neether, nyther - Let's call the whole thing off ! You like potato and I like po-tah-to, You like tomato and I like to-mah-to; Potato, po-tah-to, tomato, to-mah-to - Let's call the whole thing off ! 我爱听这首歌,尤其是由Louis Armstrong 及 Ella 的二重唱版本。它显示出两个恋爱中人的彼此竞争有多辛苦,也是关于互相妥协并寻求共通之处的历程。 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指令查询,查询结果会一列列地印出来。 $db = mysql_connect("localhost", "root", "password"); mysql_select_db("mydb",$db); $result = mysql_query("SELECT * FROM employees",$db); if ($result === false) die("failed"); while ($fields = mysql_fetch_row($result)) { for ($i=0, $max=sizeof($fields); $i < $max; $i++) { print $fields[$i].' '; } print "
n"; } 上列的程式码用颜色标出分段,第一段是连结的部分,第二段是执行SQL指令,最后一段则是显示栏位,while回圈扫描结果的每一列,而for回圈扫描到每列的栏位。 接下来是以ADODB的程式码得到同样的结果: include("adodb.inc.php"); $db = NewADOConnection('mysql'); $db->Connect("localhost", "root", "password", "mydb"); $result = $db->Execute("SELECT * FROM employees"); if ($result === false) die("failed"); while (!$result->EOF) { for ($i=0, $max=$result->FieldCount(); $i < $max; $i++) print $result->fields[$i].' '; $result->MoveNext(); print "
n"; } 现在改成指向Oracle资料库,程式码只要修改第二行成为 NewADOConnection('oracle'),让我们看一下完整的程式码... 与资料库连结 include("adodb.inc.php"); $db = NewADOConnection('mysql'); $db->Connect("localhost", "root", "password", "mydb"); 连结的程式码比起原来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指令更容易些,这点我们在进阶的章节会提到。 撷取资料 while (!$result->EOF) { for ($i=0, $max=$result->FieldCount(); $i < $max; $i++) print $result->fields[$i].' '; $result->MoveNext(); print "
n"; } 前面取得资料的范例很像从档案读资料,在每一行我们首先检查是否到了档案的结尾(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的商业应用,我们自己内部也正以这个理由如此使用中。 结论 为了感谢你看完这篇文章,下面就是let's call the whole thing off的完整歌词。 Refrain You say eether and I say eyether, You say neether and I say nyther; Eether, eyether, neether, nyther - Let's call the whole thing off ! You like potato and I like po-tah-to, You like tomato and I like to-mah-to; Potato, po-tah-to, tomato, to-mah-to - Let's call the whole thing off ! But oh, if we call the whole thing off, then we must part. And oh, if we ever part, then that might break my heart. So, if you like pajamas and I like pa-jah-mas, I'll wear pajamas and give up pa-jah-mas. For we know we Need each other, so we Better call the calling off off. Let's call the whole thing off ! Second Refrain You say laughter and I say lawfter, You say after and I say awfter; Laughter, lawfter, after, awfter - Let's call the whole thing off ! You like vanilla and I like vanella, You, sa's'parilla and I sa's'parella; Vanilla, vanella, choc'late, strawb'ry - Let's call the whole thing off ! But oh, if we call the whole thing off, then we must part. And oh, if we ever part, then that might break my heart. So, if you go for oysters and I go for ersters, I'll order oysters and cancel the ersters. For we know we Need each other, so we Better call the calling off off. Let's call the whole thing off ! Song and lyrics by George and Ira Gershwin, introduced by Fred Astaire and Ginger Rogers in the film "Shall We Dance?"

提问者:Ankyliu   08-17 15:03
答复
路过。。。顺便帮顶:)
回答者:玉米づ冰冻可乐 - 瓦岗村民 8-22 09:10
我也来回答:
不管你有没有帮助我们,瓦岗寨8万村民将感谢你。。。。。

为防止灌水,您需要计算一道数学题: 答案:
53 + 72 = ? 请将计算结果填在上面

 
[]
©2007 PhpRes.COM