`
thunderbow
  • 浏览: 157393 次
  • 性别: Icon_minigender_1
  • 来自: beijing
社区版块
存档分类
最新评论

PEAR DB将数据库工作简化

阅读更多

有经验的PHPer应该对PEAR*都不会陌生,不过对新手来说,简单的练习PEAR应该不必派上用场,不过在开始接触复杂的编程时,PEAR对PHPer来说可以说是一个很有效的工具。到底什么是PEAR我这里不详细讨论了,因为答案都在pear.php.net,不过这里得介绍一个很好用的工具 -- DB,这是一个以PEAR为基础的数据库抽象层;虽然PHP已经有内建的数据库函式,不过功能有限,而且不容易转移平台。例如通常连接MySQL的函式是mysql_connect(),而PostgreSQL则是pg_connect(),虽然你大可将mysql_[x]改成pg_[x],不过如果你的数据库抽象层的源码超过500行的话这将是一个恶梦!如果你的数据库函式是散布在你的源码,那就更恐怖了。所以,这时候需要有一个跨平台的数据库界面抽象层来为你完成大部分的工作,包括连接,query,update等等,而且还需要提供debug的功能。PEAR DB正是一个这样的工具,提供多种平台包括dbase, Frontbase, InterBase, Informix, MiniSQL, MSSQL, MySQL, Oracle, ODBC, PostgreSQL, SQLite, Sybase。PEAR DB可以完全作为一个PHP程序的数据库层,而且速度也很理想(当然不比直接用mysql_query来得快,不过在大型的程序中可以凸现它的效果),所有的功能都包含在三个类型中,用法也很简单。以下我将介绍这三种类型:

1.DB类
DB类为PEAR DB的主干,所有的函式以静态呼叫,所以在运用的时候不需要实体化,可以直接呼叫。当你有了其中一个以上所提到的数据库之后,第一步就是连接数据库了,利用DB::connect()再加上一个[url=http://pear.php.net/manual/en/package.database.db.intro-dsn.php]DSN[/url](一段连接数据库所需的字串。DSN的格式如下:

[code]
sqltype://username:passwd@protocol+host/database?option=value
Example: $dsn =  “mysql://username:passw0rD@localhost/mydb”
[/code]

Sqltype是指数据库平台,详细的字串可以到DSN网页参考。
接下来再把DSN传入DB::connect()参数
[code]
$conn = & DB::connect($dsn);

If(Pear::isError($conn)){
        die($conn->getMessage());
}
[/code]
$conn是由DB::connect()传回来的一个界面实体,接下来它将扮演一个很重要的角色;注意下面一段,这里运用到PEAR::isError()来检查$conn是否是DB error物件,要是有错误的话,$conn将会自动释出错误信息。getMessage()这个函式存在于DB error类型,随时可以调用。



*PEAR一般上是随PHP一起安装的,如果要另外安装的话,可以下在PHP的完整压缩包,执行里面的do-pear.bat就可以了。(DB已经包含在PEAR安装包里面了,所以不需要另外下载。)


 

 
2.DB::common界面

刚刚的$conn就是这个界面类型的实体,这个界面将负责大部分的数据工作,包括select, update, insert等等。这个界面包含了大量功能强大的函式,不过我将介绍几个重要的。

[code]
--Select

$sql = “SELECT * FROM blah”;
$conn->setFetchMode(DB_FETCHMODE_ASSOC);

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

$row = $result->fetchRow();
print_r($row);

$conn->disconnect();
[/code]

如果你熟悉PHP的数据库方法的话,应该对[x]_fetch_assoc不会陌生,没错,意思大致上相同。DB::common 的默认设定是DB_FETCHMODE_ORDERED, 和[x]_fetch_row大致上相同,以上例子我将fetchmode利用DB::common::setFetchMode()将它改为DB_FETCHMODE_ASSOC,得出的$result将会和[x]_fetch_assoc相同,都是以fieldname作为引索。这里的$result( DB::result ) 和mysq_query()所传回的差不多,是PEAR DB里面另外一个重要的类型,稍候会作介绍;如果需要得到一行的数据,可以用DB::result::fetchRow(),就可传回一个数据行的阵列。

之前所提到的PEAR::isError()也可以用来检查$result的结果是否有错误。编码如下:
[code]
if(PEAR::isError($result)){
        die($result->getMessage());
}
[/code]
和之前一样如法炮制,只是将对象由DB::common改成DB::result。
DB::common也提供了两个很方便的方法让PHP能够简单地处理INSERT和UPDATE,prepare()和execute(),这两个组合可以让你很轻松的同时处理多个INSERT和UPDATE  statement。prepare()主要现载入需要执行的statement,而execute将负责执行,同时也载入所需的参数。看看以下的例子:
[code]

$conn->prepare(“INSERT INTO foo (fname, fage, flocation) VALUES (? , ? , ? )”);
$data = array(“foo”,23,”earth”);
$conn->execute($stn, $data);

if(PEAR::isError($stn)){
        die($stn->getMessage());
}

$conn->freePrepared();
[/code]

“?”这里是代表参数,$data里面的数据会依次序被传入prepare()里面的statement里面的”?”参数。所有的数据将会自动呼叫escaped string来将一些意义符号字串化,而且execute()也会自动辨认数据类型,例如数字,字串等等。那么如果要输入超过一行以上的数据呢?可以简化吗?答案是肯定可以了,参考下面的例子你就会发现,DB是多么不可思议了
[code]

$conn->prepare(“INSERT INTO foo (fname, fage, flocation) VALUES (? , ? , ? )”);
$data = array(array(“foo”,23,”earth”),
array(“faa”,21,”moon”),
array(“fee”,25,”mars”)
array(“fii”,19,”Pluto”));
$conn->executeMultiple($stn, $data);

if(PEAR::isError($stn)){
        die($stn->getMessage());
}

$conn->freePrepared();
[/code]
几个繁杂的程序在几行就可以完成了,关键就在于$data和DB::common::executeMultiple()。$stn是execute()或executeMultiple()所传回的结果,他有三种可能性:第一,DB::result,可以将statement的结果数据转为result实体;第二,定义常数DB_OK,代表statement成功执行;第三,DB error实体,后面的PEAR::isError()就是检查传回是否为DB error。如果要用同一个DB::common资源进行另一个query,必须呼叫DB::common::freePrepared()来清除之前prepared()内的statement。

DB::common可以说是PEAE DB的最重要的工作界面,大部分和数据的接触都在这里进行,而且功能也强大。除了以上说明的几个方法之外,DB::common还有很多个方法也是很实用的。详细的说明可以到pear.php.net查看。

待续..


 

 
3.DB result

顾名思义,DB result是由DB::common在query之后传回的数据组合。DB result本身是一个物件,所以内付几个很方便的方法。

--fetchInto()和fetchRow()
以上两个方法用法大致上相同,唯一个差别就在于前者将结果传给参数( $result->fetchInto($row));后者本身传回结果($row = $result->fetchRow()) 。与PHP内建的方法一样,fetchrow()每次将一行资料传回。

--numCols()和numRows()
这两个方法将分别传回DB result内Columns和Rows的数量。

--free()
将DB result内的资料从记忆体中撤走。

这个例子是将以上几种方法一起运用:
[code]
$conn->setFetchMode(DB_FETCHMODE_ASSOC);
$result = $conn->query($sql);

echo “There are “.$result->numRows().” Results found and “.$result->numCols().” fields are available.”;

while( $row = $result->fetchRow()){
        echo $row[‘name’];
}

$result->free();
[/code]

后记:
以上资料是基础篇,如果想要再深入可以到http://pear.php.net/package/DB PHP PEAR的网页,里面有详细的文件供参考。除了DB之外,PEAR网页内也有各式各样的数据库抽象层让人免费下载,包括LDAP, ADODB,还有类似DB的MDB2也是一个不错的选择。
分享到:
评论

相关推荐

    perl pear db

    总的来说,Perl PEAR DB是一个强大的数据库操作工具,它通过提供一致的接口简化了数据库编程,使得开发者可以专注于业务逻辑,而不是数据库系统的具体细节。通过学习和掌握这个模块,Perl程序员可以更高效地处理各种...

    PEAR:创建中间的数据库应用层

    2. **数据库抽象层**:PEAR中的DB类或者PDO_PEAR扩展可以帮助创建数据库抽象层,允许程序独立于特定的数据库系统,如MySQL、PostgreSQL等。这使得更换数据库变得更加容易,同时也简化了SQL查询的编写。 3. **数据...

    PHP核心教程 php pear php pear

    3. **类库**:包括网络、数据库、文件处理、日期时间等多个领域的类库,如DB(数据库抽象层)、Mail(邮件处理)、XML_RPC(远程过程调用)等。 4. **编码规范**:PEAR也制定了统一的编码风格和命名规则,有助于...

    Pear Admin Think 基 于 thinkphp6 的 管 理 系 统

    3. 强大的依赖注入容器:支持自动绑定,简化服务提供和注入过程。 4. 精简的核心库:减少了不必要的组件,使框架更加轻量级。 二、Pear Admin Think概述 Pear Admin Think是针对ThinkPHP6开发的后台管理模板,提供...

    PHP-pear学习资料

    - 例如,安装数据库连接组件可以使用 `pear install DB` 命令。 **使用 PEAR 组件**: - 在 PHP 文件中通过 `require_once 'path/to/PEAR/Component.php';` 引入所需组件。 - 调用组件中的函数或类来实现特定功能,...

    PHP Programming With PEAR

    PEAR提供了多个用于数据处理的包,例如DB(数据库抽象层)、MDB2(多数据库抽象层)、Table 和 Record。这些包可以帮助开发者更轻松地与不同类型的数据库进行交互,提高代码的可移植性和可维护性。 #### 日期处理 ...

    手册资料-pear英文手册

    2. **类库**: PEAR包含大量预定义的类库,如数据库访问(DB)、HTTP请求处理(HTTP_Request)、XML处理(XML_RPC)、邮件发送(Mail)等,这些类库可以极大地简化开发工作。 3. **结构规范**: PEAR提倡的命名规则和...

    毕业论文jsp1722在线影院网站mysql.docx

    PEAR 的 DB 类就是一种数据库接口的抽象。 三、连接到 MySQL 数据库 连接到 MySQL 数据库需要提供的信息包括数据库服务器的 IP 地址、数据库的名字、用户名和密码。我们可以使用 PHP 的 connect 函数或 PEAR 的 ...

    PHP访问MySQL

    【PHP访问MySQL】是关于如何使用PHP...使用PHP内建函数或PEAR的DB类可以简化这一过程,同时确保代码的可移植性和安全性。理解这些基本概念对于任何需要在Web应用中与MySQL数据库交互的PHP开发者来说都是至关重要的。

    code.zip

    DB是PEAR提供的一款数据库抽象层,用于简化在多种数据库系统上进行数据库操作。IDEAS文件可能包含了关于DB组件的设计想法或改进提案,而MAINTAINERS文件则列出该组件的主要维护者和贡献者。 综上所述,code.zip...

    php5.3.10包

    它包括了用于构建、测试和发布PHP软件的工具,以及大量的预包装的PHP类库,如DB(数据库抽象层)、Mail(邮件处理)和XML_RPC(远程过程调用)等。 在提供的压缩包中提到了PHPUnit,它是PHP的单元测试框架,对于...

    WeDeS-开源

    这个系统结合了多种技术,如Smarty模板引擎、用户管理功能、PEAR DB数据库抽象层以及可扩展的用户模块,旨在简化Web应用的开发、部署和管理过程。 1. **Smarty模板引擎**:Smarty是PHP中广泛使用的模板引擎,它将...

    Simple Management for BIND-开源

    此外,它采用了"PEAR DB数据库后端",PEAR DB是PHP的一个扩展库,用于处理各种数据库系统的连接和查询,这使得Smbind可以与多种数据库兼容,增加了灵活性。 "提供演示和屏幕截图"意味着用户可以在实际安装前通过...

    php和序设计 不错的学习

    - **数据库抽象层**:学习如何使用PEAR::DB或PDO等数据库抽象层来简化数据库操作。 #### 五、动态内容生成 - **动态图像**:掌握如何使用PHP生成动态图像文件。 - **PDF文件**:了解如何使用PHP创建PDF文件。 - **...

    WASP-开源

    WASP集成的PEAR DB_DataObjects是PHP的一个数据库抽象层,它允许开发者以面向对象的方式处理数据库操作。通过DB_DataObject,开发者可以创建数据对象类,这些类代表数据库表,提供了增删改查等基本操作,降低了...

    PHP anyDB-开源

    这个库的核心目标是简化数据库操作,让开发者无需深入理解每种数据库系统的特定语法,就能进行数据的存取和管理。 **1. 支持的数据库系统** anyDB 支持以下常见的数据库系统: - **MYSQL**:MySQL 是一种广泛使用的...

    smbind:BIND的简单管理

    4. **数据库后端**:Smbind利用PEAR DB作为其数据存储后端,这允许它与多种数据库系统(如MySQL、PostgreSQL等)兼容,提供了灵活性和可扩展性。 **PHP在Smbind中的作用** PHP是一种广泛使用的开源脚本语言,尤其...

    OpenIT-开源

    Pear::DB 是一个数据库抽象层,它允许开发者编写独立于具体数据库系统的代码,支持如 MySQL、PostgreSQL、Oracle 等多种数据库。 OpenIT 的核心功能包括: 1. **库存管理**:帮助企业跟踪硬件、软件和其他资产,...

Global site tag (gtag.js) - Google Analytics