学习PEAR::DB

首先关于标题 为什么是

PEAR::DB在没有完全了解PEAR之前(其实现在也不能算完全了解)我一直认为PEAR就是一个数据库包,它支持多种数据库。但不是这样的。DB就是PEAR中的一部分。具体信息请参考这里.在开始我之前我还给冠冕堂皇一下,稍微介绍一下PEAR。

PEAR基础

及时交付应用程序是确定解决方案采用何种技术的关键所在,PHP借助于PEAR(PHP Extension and Application

Repository:PHP扩展与应用库)会大大促进其开发过程。PEAR是一种代码库,它为标准程序功能提供预先编写的类,从而大大降低了应用程序的开发时间。PEAR在概念上类同于Perl的CPAN,PEAR包含了1具有丰富特性的功能函数,包括数据库、邮件和错误处理等。在采用PEAR的情况下,开发人员就可以部署和增强已经编写的基本函数同时把注意力集中到编写程序新功能这一方面上来。

创建PEAR的目的是为开发人员共享PHP代码和促进代码的重用提供一种标准化的方式。该项目始终处于开发的过程中,用户可以提交自己编写的代码供加入PEAR库使用,后者则同PHP捆绑。所有的PEAR包都在考虑到语法和可读性的情况下严格遵守编码规则,这些代码由用C语言编写的PHP或者PHP扩展所组成。

Stig

Bakken于1999年晚些时候开始着手开发PEAR项目。他的目的是创建一个有组织的代码库,由这个代码库起到PHP开发人员团体的资源库作用。该项目在过去的两年里成长的非常快,目前已经包含了相当多的、非常有用的可重用代码。虽然其他的PHP代码库也不少,比如

Zend的Code Gallery和PHP Builder的Source Code Snippet

Library等等都非常有名,但是,PEAR提供了一种便利函数之间互操作的标准。此外,提交给PEAR的代码会接受严格的检查,由这类标准和检查措施保证代码的质量和可靠性。

可用的功能

PEAR分成三类:PEAR核心组件、PEAR包和PECL包。核心组件(Core

Component)包括PEAR和PEAR_Error的基类以及数据库、HTTP、日志记录和电子邮件函数等。PEAR包包括提供认证、联网和文件系统特性的函数以及采用XML和HTML模版的工具等。PECL包是对PHP的扩展,它用C语言编写,并不遵守编码规则。目前,所有这一类的代码都是实验性的。要了解有关PEAR功能的更多信息请参考

PEAR在线手册。

假如你有兴趣给PEAR提交代码,你可以加入PEAR开发者邮件列表并且请求大家检查你的代码,从而实现以上目的。不过,你得注意到已经包括在库内的函数并且遵守PEAR的编码规则。

从哪里获取PEAR

PEAR捆绑在PHP发布包内,当你安装PHP的时候也就同时安装了PEAR。假如你打算获得一个稳定的版本,而且你可以在没有最新PEAR版本的情况下也活得下去,那么你可以从php.net的下载网页获得最新的PHP版本。假如你喜爱冒险,希望采用最新版本的PEAR,你可以按照匿名CVS访问的指示用CVS客户程序下载它。

安装了PHP之后PEAR资源就会被放置到~/php/PEAR/

目录下。你不妨把自己的php目录位置增加到php.ini的include_path参数中来(比如:include_path =

“.:/usr/local/lib/php”;),这样就可以使用PEAR功能了。

如何使用PEAR

现在所要做的无非是在用到函数和你编写的其他类的地方采用require_once()。清单A中的例子使用了PEAR的电子邮件特性Sendmail。这部分代码例示了PEAR库内的Mail.php文件,该文件是对PEAR.php类的扩展。

接下来,我们设置一些必要的变量,它们是$recipients、$headers和$body,这些变量是所有PEAR

Mail函数和$params所需要的。你可以参在线PEAR手册找出这些变量的设置方法。在PEAR代码本身的注释中也蕴涵了很多信息,不过一般而言,网站对你的帮助还是最大的。

最后,示例代码会调用PEAR

Mail类。首先,我们用~/php/Mail.php文件中的Mail::factory方法为邮件驱动程序包含适当的类文件,在我们所举的例子里就是

Sendmail(位于~/php/Mail/sendmail.php文件内)。接着,我们从PEAR

Mail类里实际调用邮件发送函数。当我们对Mail类实例化的时候采用引用(=&)就可以通过引用名$mail_object引用该类了。

假如你想了解PEAR DB函数的用法,你不妨到 Quick Start Guide to Pear DB去看看,它是由Tomas

V. V. Cox负责维护的。

为什么使用PEAR

如上所述,PEAR功能部署简单,同时不需要额外的编程。虽然我们可以用PHP的固有函数达到同样的结果,但是,部署PEAR模块可以立即为我们带来错误检查等实际利益,同时还便利了程序的重用。

此外,越来越多的高级应用程序也开始采用PEAR了,而PEAR的代码库也在不断的增长之中。因为PEAR包含在PHP许可权之内,所以你可以免费使用或者修改你选择的函数。还有,你再也不必反复编写令人麻木的认证模块了,这对开发人员来说可是一项具有相当吸引力的好处,而且你还可以享受到定制开发的莫大优点。

好处多多

采用合格的预编写、可重用代码,你就可以显著地加快应用程序的开发周期而不必在技术选择上过分地费脑筋了。PEAR

是PHP团体为便利开发者而付出的努力所结出的硕果,它提供了实现优秀应用程序的一整套方法。采用PEAR代码以及为其做出自己的贡献不仅加快了项目交付时间,同时还可以在今天和未来开发出质量更好的应用程序。

TechRepublic是一个专为各类IT专业人士设立的在线社区以及资源中心,我们提供有深度的技术文章,这些文章由IT专家写成,面对IT专家读者。除了提供从Windows到e-mail到防火墙等各种文章以外,我们还提供IT业界分析,下载,管理要点,讨论组以及新闻邮件服务。

终于贫完了。。接下来我将详细介绍一下PEAR:DB中操作数据库的一些方法.

1. Pear DB 用法

//1.1 连接和关闭数据库

require_once 'DB.php';

$user = 'foo';

$pass = 'bar';

$host = 'localhost';

$db_name = 'clients_db';

// 这是统一的连接字符串形式:

$dsn = "mysql://$user:$pass@$host/$db_name";

//连接成功则返回一个正确的数据库指针

//反之如果连接失败则返回错误的数据库指针

//如果你想开启mysql持久连接

//设置第二个参数为真

// $db = DB::connect($dsn,

true);

$db = DB::connect($dsn);

//

使用函数DB::isError查看返回的数据库连接指针是否正确

if (DB::isError($db))

{

die ($db->getMessage());

}

//

用disconnect()关闭数据库的连接

$db->disconnect();

1.2 执行数据库查询

< ?php

$sql = "select * from

clients";

//如果查询语句是 "SELECT"之类的,

$db->query 将返回

// 查询结果对象

// 如果失败则返回 DB Error

object.

$result = $db->query($sql);

// 总是检查指针是否正确

if (DB::isError($result))

{

die ($result->getMessage());

}

?>

1.3.1 获得结果集

< ?php

// 得到每行记录

while ($row

= $result->fetchRow())

{

$id = $row[0];

}

//你还可以使用 fetchInto()

< ?php

while

($result->fetchInto($row)) {

$id = $row[0];

}

?>

?>

1.3.2 选择fetched row的格式

//支持 DB_FETCHMODE_ORDERED

(default), DB_FETCHMODE_ASSOC and DB_FETCHMODE_OBJECT.

< ?php

$res = $db->query('select id, name,

email from users');

$row = $res->fetchRow($mode);

//DB_FETCHMODE_ORDERED

$row = array

(

0 =>

<column "id"

data>,

1 =>

column><column

"name"

data>,

2 =>

column><column

"email"

data>

);

$id = $row[0];

//$mode =

DB_FETCHMODE_ASSOC

$row = array

(

'id'

=>

column><column

"id"

data>,

'name'

=>

column><column

"name"

data>,

'email'

=>

column><column

"email"

data>

);

$id = $row['id'];

//With $mode =

DB_FETCHMODE_OBJECT

$row = db_row

Object

(

[id]

=>

column><column

"id"

data>,

[name]

=>

column><column

"name"

data>,

[email]

=>

column><column

"email"

data>

)

$id = $row->id;

?>

1.3.3释放查询指针

< ?php

...

$result = $db->query('SELECT * FROM

clients');

while ($row

= $result->fetchRow())

{

...

}

$result->free();

?>

1.4 Quick data retrieving

//Pear DB

还提供了类型get*之类的方法来获取数据。如getOne, getRow, getCol, getAssoc and

getAll.

< ?php

require_once 'DB.php';

$db = DB::connect('pgsql://postgres@unix+localhost/clients_db');

//

-----------------------------------------------------------

// getOne retrieves the first

result of the first column

// from a query

$numrows = $db->getOne('select count(id)

from clients');

//

-----------------------------------------------------------

// getRow will fetch the first row

and return it as an array

$sql = 'select name,

address, phone from clients where id=1';

if (is_array($row

= $db->getRow($sql)))

{

list($name,

$address, $phone)

= $row;

}

//

-----------------------------------------------------------

// getCol will return an array

with the data of the

// selected column. It accepts the

column number to retrieve

// as the second

param.

// The next sentence could return

for example:

// $all_client_names =

array('Stig', 'Jon', 'Colin');

$all_client_names

= $db->getCol('select name from

clients');

//

-----------------------------------------------------------

// Other functions are: getAssoc()

and getAll().

// For the moment refer to their

in-line documentation

// at

pear/DB/common.php

//

-----------------------------------------------------------

?>

2 小结

< ?php

// get the object with,

ie:

$db = DB::connect('mysql://user:pass@localhost/my_db');

// Set options

$db->setErrorHandling();

$db->setFetchmode();

// Information

$db->affectedRows();

$db->tableInfo();

// Database

manipulation

$db->query();

// Data fetch

$db->nextId();

$db->getOne();

$db->getRow();

$db->getCol();

$db->getAssoc();

$db->getAll();

// Place holders and execute

related

$db->quote();

$db->prepare();

$db->execute();

$db->executeMultiple();

// Transactions

$db->autoCommit();

$db->commit();

$db->rollback();

// Disconnection

$db->disconnect();

// get the object with,

ie:

$res = $db->query('select * from

foo');

// Data fetch

$res->fetchRow();

$res->fetchInto();

// Result Info

$res->numCols();

$res->numRows();

$res->tableInfo();

// Free

$res->free();

// get the object with,

ie:

$error = $db->query('select * from

no_table');

$error->getMessage();

$error->getDebugInfo();

$error->toString();

?>

php $db-%3egetall(_PHP PEAR::DB操作, $res-fetchRow(); getone getrow相关推荐

  1. 2db多少功率_功率和db换算(功率与db换算表)

    dBm是功率的单位,1dbm等于1毫瓦,也就是千分之一瓦. 1. dBm这是我们接触到比较多的一个单位,也是唯一一个用于表示功率绝对值的单位,其计算公式如下:10log. 功率单位 与P(瓦特)换算公 ...

  2. TIA portal西门子博途中优化的DB块和标准DB块的区别

    在TIA PORTAL 中,为S7-1200/S7-1500 CPU添加一个DB块时,默认属性为优化的DB块,若要修改成标准的DB,需要右击该DB块,点击"属性",将优化的DB块的 ...

  3. s7300的db块详细说明_(转载)一张表搞清楚西门子S7系列标准DB块与优化DB块

    在TIA Portal中为S7-1200/S7-1500 CPU 添加一个 DB 块时,其缺省属性为优化的 DB ,优化的 DB 块与标准的 DB 块整体对比如下表所示: 项 标准 DB 优化 DB ...

  4. dB family cheat sheet: dB, dBW, dBm, dBi, dBc, dBFS, etc

    目录 1. dB 2. dBi,dBd 3. dBW和dBm 4. dBc(Decibel relative to carrier power level) 5. dBuV(dB over 1 mic ...

  5. rake db:migrate db:reset和db:schema:load之间的区别

    本文翻译自:Difference between rake db:migrate db:reset and db:schema:load The difference between rake db: ...

  6. 无法启动链接服务器XXX DB Link的 OLE DB 访问接口 SQLNCLI11 的嵌套事务。由于 XACT_ABORT 选项已设置为 OFF,因此必须使用嵌套事务。链接服务器XXX ...

    无法启动链接服务器"XXX DB Link"的 OLE DB 访问接口 "SQLNCLI11" 的嵌套事务.由于 XACT_ABORT 选项已设置为 OFF,因 ...

  7. APPSERV下安装pear db和auth

    本来准备安装pear的,但是windows7下未能切换出D盘,最后发现appserv里面自带有pear.bat,双击运行后,可能弹出php_mbstring.dll未能找到的信息,去php.ini找到 ...

  8. redis 清空db下_PHP操作redis实现的分页列表

    正文内容 封装类文件如下: /* * redis 分页数据类库 */class redisPage{protected $_redis;protected $_redis_ip = '127.0.0. ...

  9. mysql select db 废弃_php 项目放服务器显示mysql_connect 已经废弃 ?

    小弟前端菜鸟一枚在做一个小项目时 header("Content-type: text/html;charset=utf-8");//防止乱码 //1.获取链接 $conn=@my ...

最新文章

  1. 关于SpringMVC和Struts2的区别
  2. 数学之路(2)-数据分析-R基础(3)
  3. Python高级运维开发2016年7月第14期隆重开课
  4. [Android] 开源View组件(一)
  5. python方差分析模型的预测结果怎么看_statsmodels中方差分析表结果解析
  6. Linux IPTables:如何添加防火墙规则
  7. VOC标签转化为YOLO标签
  8. MD5和AES加密的处理
  9. 【IMX6ULL笔记】--内核底层驱动初步探究
  10. Go 程序如何被启动,g0,m0 又是什么?
  11. 搜狗细胞词库解析(仅提取词和词频)
  12. 央视力荐的这套书,让5岁孩子看漫画,秒懂物理,学习早“开窍”!
  13. 论文研读 —— 4. You Only Look Once Unified, Real-Time Object Detection (3/3)
  14. 一文看懂Android APK安装的原理
  15. 苹果员工薪酬单:苹果人都挣多少钱?
  16. Win10数字小键盘按键变成方向键怎么办?Win10数字小键盘按键变为方向键解决方法
  17. python语言是网络编程语言吗_三大主流编程语言Python为啥这么牛?
  18. 网络偷窥者很多,如何消除上网的浏览痕迹?
  19. YOLOv7改进之二十二:涨点神器——引入递归门控卷积(gnConv)
  20. php 两个时间戳相隔小时数,php 计算两个时间戳相隔的时间实例

热门文章

  1. 荣耀10X值得入手吗?今天来聊一聊
  2. 一位参加1月19日UToken石家庄无极生态建设高峰会小伙伴的分享 !
  3. redis基本类型及微博微信中是如何应用的
  4. js刷新当前页面的方法
  5. 【分享】Adobe Illustrator 视频教程 - 完全免费,下载即可观看
  6. 《把你的英语用起来》读书笔记:提供一个可量化,易持续的英语学习方法
  7. 【MyBatis-Plus】MyBatis-plus的注入器使用
  8. ubantu20.04服务器使用docker以及docker-compose编排部署前后端分离个人博客项目(springboot+vue+mysql+redis)
  9. 音频相关操作接口-C++实现
  10. Pandas resample重采样及freq用法