仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1568|回复: 19
打印 上一主题 下一主题

[学习教程] PHP网页编程之PHP中 ADOdb 类库引见(一)

[复制链接]
不帅 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-2-4 00:18:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
培训的第三阶段,开始接触MYSQL,设计数据库,学习PHP如何去连接MYSQL数据库。对于MYSQL,我并不陌生,因为学校开设了Linux系统的课程,对于数据库的操作。ado   媒介
为何要利用数据库类库?

初学者 (乃至一些非初学者)经常犯的毛病,就是在开辟使用法式的时分,缺少对将来的思索。假设有一天,你的法式需求利用其它的数据库,岂非你还需求从头写一篇针关于这个版本数据库的法式吗?这不是不成能产生的,特别是当今朝的数据库能够不合适你以后的需求的时分。 然而当你做这一切的时分 ,你会发明绝非你想像的那样轻易:每个 DBMS 有分歧的函数。举例来讲:在 Mysql 中毗连数据库的函数为 mysql_connect(),而在MSSQL倒是 mssql_connect()。从头检查你一切的代码,然后修正一切操作数据库的函数和查询语法,这毫不是一项复杂的任务。法式会常常的被绑缚到了毛病的数据库上,以致没法在运转时到达最优功能。数据库类库就是如许发生的。它答应你经由过程一样的代码来操作分歧的数据库。一个设计优秀的数据库类库可以完善的改动这一切。它答应你经由过程极小的修正,就可以转接到其他数据库:不管你要毗连甚么数据库办理体系,只需利用统一个的函数,和分歧的参数。举例来讲, 在 ADOdb 中,只需复杂地将 $db = NewADOConnection('access ') 修正为$db = NewADOConnection('mysql'),如许,你就轻松的把你的法式从 Access 数据库转移到了 Mysql 数据库中。如今收集上已有了良多如许的数据库类库,好比Pear,PHPlib,我也已在任务中利用它们了,或许你也已经用过。但本文仅将重点放在我所出格存眷的 ADOdb。本文我只扼要地作一个引见,使你可以即刻应用它来开辟你的下一个项目。今后的文章中咱们将会按部就班的对它进入更深切的懂得。

今朝,ADOdb 撑持的数据库包含 MySQL, PostgreSQL,Interbase,Firebird,Informix,Oracle,MS SQL 7,Foxpro,Access,ADO,Sybase,FrontBase,DB2 和 generic ODBC。

ADOdb 的装置
装置 ADOdb 是一件极期轻易的事,信任伶俐的你必定不会感应费劲。

起首, 肯定你正在运转的 PHP 是 4.0.4 版或更新版。 假如不是,我强列建议你晋级!
从 PHP Everywhere 站点下载 .zip 或 .tgz 文件,解紧缩到你所选的途径下。
这个途径不该在网页目次(WWWTREE,译者注:假如你的网页是在/www/下,那末,这个目次就不该为/www/here)下!固然ADOdb的包括文件已利用了 .inc.php 的扩大名 ,使得办事器即便是在最糟的设置装备摆设下,也不会将这些.inc文件经由过程明文体例在阅读器中显示出来,然而咱们历来不倡始将库函数文件放在网页目次下的行动。然后把下载上去的文件运转:tar -zxvf adodb350.tgz 解压,在Windows下你可使用一个你喜好的解压软件来操作,如许,你会失掉一个 adodb 的目次其下包含了很多子目次。

测试你的装置
好了,让咱们来测试一下你的装置吧。 经由过程在剧本中添加以下三行代码来测试你的装置是不是胜利。注重要把代码中的参数修正成你本人的。

include("$adodb_path/adodb.inc.php"); // includes the adodb library
$db = NewADOConnection('$database_type'); // A new connection
$db->Connect("$host", "$user", "$password", "$database_name");
如今你已具有一个数据库毗连对象 $db 了。 你也能够利用 ADONewConnection 来交换 NewADOConnection ―― 这两个是统一函数的分歧的名字。 毗连的数据库变量 $database_type 需求针对你的实践情形改成你所需求的。可使用以以下表中的一个(括号内的为描写局部,不要在代码中利用):

access (Microsoft Access/Jet)
ado (Generic ADO, the base for all the other ADO drivers)
ado_access (Microsoft Access/Jet using ADO)
ado_mssql (Microsoft SQL Server using ADO)
db2 (DB2)
vfp (Microsoft Visual FoxPro)
fbsql (FrontBase)
ibase (Interbase 6 or before)
firebird (Firebird)
informix72 (Informix databases before Informix 7.3)
informix (Informix)
maxsql (MySQL with transaction support)
mssql (Microsoft SQL Server 7)
mssqlpo (Portable mssql driver)
mysql (MySQL without transaction support)
mysqlt (MySQL with transaction support, identical to maxmysql)
oci8 (Oracle 8/9)
oci805 (Oracle 8.0.5)
oci8po (Oracle 8/9 portable driver)
odbc (Generic ODBC, the base for all the other ODBC drivers)
odbc_mssql (MSSQL via ODBC)
odbc_oracle (Oracle via ODBC)
oracle (Oracle 7)
postgres (PostgreSQL)
postgres64 (PostgreSQL 6.4)
postgres7 (PostgreSQL 7, currently identical to postgres )
sqlanywhere (Sybase SQL Anywhere)
sybase (Sybase)
假如你的链接代码呈现了毛病的提醒,那末你起首要反省的中央就是在途径或毗连的变量上。在你指摘 ADOdb 之前,请肯定你是已准确的利用那些变量。(良多伴侣常花太多工夫去修改这些不言而喻的毛病。) 假如毗连没有任何毛病提醒,那末咱们如今已可以在咱们的项目中来利用 ADodb 了。

经由过程你的剧本毗连到数据库
把上边的代码到场到你的代码前,让咱们先退一步。咱们最好能把上边的代码用咱们本人的办法来封装起来。如许可使你的法式变得更天真、更具移植性。假如你直接把下面的代码拔出到你的项目标每一个文件中,假如未来项目标途径改动了,将会很轻易发生毛病,假如你的暗码改动了,你能够需求对你一切的剧本停止修正,如许将会影响咱们利用库函数的初志。而且,由于你的暗码信息是在WEBTREE下的,这将发生隐患。我保举将暗码信息放在一个自力的包括文件中,好比在 ADOdb 装置目次下的某个中央。假如你要在其他办事器上运转你的法式时,你就不克不及包管目次布局会是不异的,所以,你要确保这个途径是准确的。我建议利用PHP 的主动包括功效来主动地包括这个文件。


include("$adodb_path/db_values.inc.php");
include("$adodb_path/adodb.inc.php");
$db = NewADOConnection('$database_type');
$db->Connect("$host", "$user", "$password", "employees");

假如你也想要利用耐久毗连, 不是每次发明一个新的毗连(这使很多WEB使用法式失掉了减速,然而要注重有些数据库是不撑持的)。可使用 PConnect 交换失落 Connect。
文件 db_values.inc.php 是咱们的数据库信息文件,内容为(你需求把上面代码中的变量改成你本人的):

<?php
$database_type="mysql";
$host = "localhost"; // 当地数据库
$user = "ian"
$password = "let_me_in"
?>

你可以在 php.ini 设置装备摆设中设定主动包括咱们的设置装备摆设文件,详细操作可以修正 PHP.ini 的下述行:

; Automatically add files before or after any PHP document.
auto_prepend_file = /usr/local/build/apache/www/tool_lib/defaults.inc
auto_append_file =


文件 defaults.inc 包括了 $adbdb_path 的值:

<?
$adodb_path = "/usr/local/build/apache/www/tool_lib/";
?>

还有其他体例来完成它,然而我发明这类办法在移植时,可以绝对地削减庞杂度。


从一个数据库中停止选择(SELECT)操作
当同时利用开辟优秀的库函数,和PHP本身供应的函数时,可以有多种办法来会见数据库。用甚么办法,完整取决于你本人的喜欢。
这里是一个复杂的例子:

$sql = "SELECT surname, age FROM employees";
$rs = &$db->Execute($sql);
if (!$rs) {
print $db->ErrorMsg(); // Displays the error message if no results could be returned
}
else {
while (!$rs->EOF) {
print $rs->fields[0].' '.$rs->fields[1].'<BR>';
// fields[0] is surname, fields[1] is age
$rs->MoveNext(); // Moves to the next row
}
}


在上例中,$rs->fields 是一个包括前往值的数组。数组索引被付与了初始的数字,你也能够按上面的办法来指定其索引:

$sql = "SELECT surname, age FROM employees";
$db->SetFetchMode(ADODB_FETCH_ASSOC); // Return associative array
$rs = &$db->Execute($sql);
if (!$rs) {
print $db->ErrorMsg(); // Displays the error message if no results could be returned
}
else {
while (!$rs->EOF) {
print $rs->fields['surname']." ".$rs->fields['age']."<BR>";
$rs->MoveNext(); // Moves to the next row
} // end while
} // end else


对了局阅读的另外一个可选的办法是将每笔记录作为一个对象前往。 ADOdb 有一个 FetchNextObject() 的函数来完成这一功效,指针会主动地移到下一笔记录。

$sql = "SELECT surname, age FROM employees";
$db->SetFetchMode(ADODB_FETCH_ASSOC); // Return associative array
$rs = &$db->Execute($sql);
if (!$rs) {
print $db->ErrorMsg(); // Displays the error message if no results could be returned
}
// loop through results
while ($row = $rs->FetchNextObject()) {
// The field names need to be uppercase
print $row->SURNAME." ".$row->AGE."<BR>";
}


拔出、更新纪录
根基的 INSERT 操作便利、快捷, 具有与SELECT一样的语法。

$sql = "INSERT INTO employees (surname, age) values ('Clegg','43')";
if (!($db->Execute($sql))) {
print 'Error inserting: '.$db->ErrorMsg().'<BR>';
}


库函数真实的长处,在于它答应你经由过程不异的语法将纪录放入分歧的数据库以内,这在之前是相对不成能的。凡是有两种产生的情况。

第一种,引号。一切的引号需求用脱字符(即`符号,键位在Tab键的上边)取代,不然会引发语法毛病。然而一些数据库利用一个单引号,别的一些则利用两个单引号。所以,你应该利用 ADOdb 中的 qstr() 而不是 PHP 中的 addslashes()。如许,前往值就将与你所利用的数据库相吻合了。

第二种,日期。很多数据库承受跟他们的日期类型纷歧致的、不兼容的格局。 ADOdb 有一个 DBDate() 函数,可以将 Unix 的 timestamp, 或 ISO(Y-m-d) 格局转换成恣意格局,以此来知足你的数据库的需求。 见下例:

$employee_surname = $db->qstr("d'Angelo");
$arrival_time = $db->DBDate(time());
// The above two functions also add the enclosing quotes, so, $arrival_time, not '$arrival_time'
$sql = "INSERT INTO employee_arrival (arrival_time,surname) values ($arrival_time,$employee_surname)";
if (!($db->Execute($sql))) {
print 'Error inserting: '.$db->ErrorMsg().'<BR>';
}

你可以以完整不异的体例更新数据库,举例来讲:

$sql = "UPDATE employees SET age='44' WHERE id='121')";
if (!($db->Execute($sql))) {
print 'Error updating: '.$db->ErrorMsg().'<BR>';
}

以上仅仅是 Adodb 的一些根基操作 ―― 下次咱们将会存眷一些 ADOdb 供应的对照深条理的器材。 假如我已使你胃口大开,并且你已不克不及再守候, 我建议你去PHP Everywhere看一下,这个站点是ADOdb的专业站点,外面有良多有效的匡助信息。

本文原文地址: http://www.databasejournal.com/features/php/article.php/2222651


  对我一点用处没有啊,我知道该怎么学,但是我想如何才能更快的学,一周速成,啊不,24小时速成那种,皮皮你有没?
莫相离 该用户已被删除
沙发
发表于 2015-2-4 10:57:35 | 只看该作者
首先声明:我是一个菜鸟,是一个初学者。学习了一段php后总是感觉自己没有提高,无奈。经过反思我认为我学习过程中存在很多问题,我改变了学习方法后自我感觉有了明显的进步。
因胸联盟 该用户已被删除
板凳
发表于 2015-2-7 15:22:13 | 只看该作者
对于初学者来说不推荐去拿钱买的。当然如果一个网站你经常去用,而且里面的资料也比较有用,最好还是买个会员比较好,毕竟那些也是别人的工作成果。
第二个灵魂 该用户已被删除
地板
发表于 2015-2-8 16:12:31 | 只看该作者
建数据库表的时候,int型要输入长度的,其实是个摆设的输入几位都没影响的,只要大于4就行,囧。
老尸 该用户已被删除
5#
发表于 2015-2-25 20:37:42 | 只看该作者
这些都是最基本最常用功能,我们这些菜鸟在系统学习后,可以先对这些功能深入研究。
金色的骷髅 该用户已被删除
6#
发表于 2015-3-8 02:24:49 | 只看该作者
本人接触php时间不长,算是phper中的小菜鸟一只吧。由于刚开始学的时候没有名师指,碰过不少疙瘩,呗很多小问题卡过很久,白白浪费不少宝贵的时间,在次分享一些子的学习的心得。
小魔女 该用户已被删除
7#
发表于 2015-3-9 14:44:09 | 只看该作者
要进行开发,搭建环境是首先需要做的事,windows下面我习惯把环境那个安装在C盘下面,因为我配的环境经常出现诡异事件,什么事都没做环境有的时候就不能用啦。
若相依 该用户已被删除
8#
发表于 2015-3-16 23:51:10 | 只看该作者
曾经犯过一个很低级的错误,我在文件命名的时候用了一个横线\\\\\\\'-\\\\\\\' 号,结果找了好几个小时的错误,事实是命名的时候 是不能用横线 \\\\\\\'-\\\\\\\' 的,应该用的是下划线  \\\\\\\'_\\\\\\\' ;
飘灵儿 该用户已被删除
9#
发表于 2015-3-26 19:11:02 | 只看该作者
说点我烦的低级错误吧,曾经有次插入mysql的时间 弄了300年结果老报错,其实mysql的时间是有限制的,大概是到203X年  具体的记不清啦,囧。
admin 该用户已被删除
10#
发表于 2015-4-5 15:11:02 | 只看该作者
不禁又想起那些说php是草根语言的人,为什么认得差距这么大呢。
不帅 该用户已被删除
11#
 楼主| 发表于 2015-4-10 19:42:27 | 只看该作者
我还是推荐用firefox ,配上firebug 插件调试js能省下不受时间。谷歌的浏览器最好也不少用,因为谷歌的大侠们实在是太天才啦,把一些原来的js代码加了一些特效。
只想知道 该用户已被删除
12#
发表于 2015-4-12 21:51:11 | 只看该作者
在我安装pear包的时候老是提示,缺少某某文件,才发现 那群extension 的排列是应该有一点的顺序,而我安装的版本的排序不是正常的排序。没办法我只好把那群冒号加了上去,只留下我需要使用的扩展。
乐观 该用户已被删除
13#
发表于 2015-4-26 20:57:19 | 只看该作者
这些中手常用的知识,当你把我说的这些关键字都可以熟练运用的时候,你可以选择自己
谁可相欹 该用户已被删除
14#
发表于 2015-4-29 17:03:16 | 只看该作者
曾经犯过一个很低级的错误,我在文件命名的时候用了一个横线\\\\\\\'-\\\\\\\' 号,结果找了好几个小时的错误,事实是命名的时候 是不能用横线 \\\\\\\'-\\\\\\\' 的,应该用的是下划线  \\\\\\\'_\\\\\\\' ;
变相怪杰 该用户已被删除
15#
发表于 2015-5-6 20:11:58 | 只看该作者
首先我是坚决反对新手上来就用框架的,因为对底层的东西一点都不了解,造成知识上的真空,会对以后的发展不利。我的观点上手了解下框架就好,代码还是手写。当然啦如果是位别的编程语言的高手的话,这个就另当别论啦。
海妖 该用户已被删除
16#
发表于 2015-6-5 21:58:42 | 只看该作者
至于模板嘛,各位高人一直以来就是争论不休,我一只小菜鸟就不加入战团啦,咱们新手还是多学点东西的好。
小女巫 该用户已被删除
17#
发表于 2015-6-6 11:43:55 | 只看该作者
建数据库表的时候,int型要输入长度的,其实是个摆设的输入几位都没影响的,只要大于4就行,囧。
飘飘悠悠 该用户已被删除
18#
发表于 2015-7-11 23:23:39 | 只看该作者
Apache不是非得用80或者8080端口的,我刚开始安得时候就是80端口老占用,就用了个 81端口,结果照常,就是输localhost的时候,应该输入为 localhost:81
柔情似水 该用户已被删除
19#
发表于 2015-7-23 00:19:24 | 只看该作者
在我安装pear包的时候老是提示,缺少某某文件,才发现 那群extension 的排列是应该有一点的顺序,而我安装的版本的排序不是正常的排序。没办法我只好把那群冒号加了上去,只留下我需要使用的扩展。
深爱那片海 该用户已被删除
20#
发表于 2015-7-25 01:24:36 | 只看该作者
php是动态网站开发的优秀语言,在学习的时候万万不能冒进。在系统的学习前,我认为不应该只是追求实现某种效果,因为即使你复制他人的代码调试成功,实现了你所期望的效果,你也不了解其中的原理。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-5-3 17:10

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表