Linux中国 Linux中国门户站!
设为主页 设为主页
收藏本站 收藏本站
 
当前位置 :首页 ->编程语言 ->PHP4/PHP5 ->正文

PHP 5 数据对象 (PDO) 抽象层与 Oracle

来源: ORACLE 作者:webmaster 时间:2007-04-16 点击: [收藏] [投稿]
try {
$dbh->exec($sql);
} catch (PDOException $e) {
// 显示警告消息
print $e->getMessage();
$info = $e->errorInfo;
// $info[0] == $e->code; unified error code
// $info[1] 是驱动程序特定的错误代码
// $info[2] 是驱动程序特定的错误字符串
}

请注意,与警告或异常相比,静默模式针对运行时错误使用的资源最少,但是为了获得该速度,您牺牲了一些简单性,而变得有一点复杂。

统一错误代码表当前包括下列常量: PDO_ERR_NONE、PDO_ERR_CANT_MAP、PDO_ERR_SYNTAX、PDO_ERR_CONSTRAINT、PDO_ERR_NOT_FOUND、PDO_ERR_ALREADY_EXISTS、PDO_ERR_NOT_IMPLEMENTED、PDO_ERR_MISMATCH、PDO_ERR_TRUNCATED、PDO_ERR_DISCONNECTED。

这些常量所代表的意思字面即可推知,但是 PDO_ERR_CANT_MAP 代码除外;这是一个 PDO 特定的代码,也就是说它无法将驱动程序特定的代码映射到统一的错误代码,因此您应该查询 errorInfo() 方法返回的驱动程序特定代码来获得更多信息。

数据类型

PDO 在某种程度上类型不可知,因此它喜欢将数据表示为字符串,而不是将其转换为整数或双精度类型。此时您可能对此有些迷惑,但是原因非常简单:字符串类型是最精确的类型,在 PHP 中具有最广泛的应用范围;过早地将数据转换为整数或者双精度类型可能会导致截断或舍入错误。通过将数据以字符串抽出,PDO 为您提供了一些脚本控制,您可以使用普通的 PHP 类型转换工具(如数学运算过程中的转换和隐式)来控制怎么样进行转换以及何时进行转换。

NULL

如果结果集中的某列包含一个 NULL 值,PDO 则会将其映射为 PHP null 值。Oracle 在将数据返回 PDO 时会将空字符串转换为 NULL,但是 PHP 支持的任何其他数据库都不会这样处理,从而导致了可移植性问题。PDO 提供了一个驱动程序级属性 PDO_ATTR_ORACLE_NULLS,该属性会为其他数据驱动程序模拟此行为:

$dbh = new PDO('OCI:', 'scott', 'tiger');
$dbh->setAttribute(PDO_ATTR_ORACLE_NULLS, true);
// 现在从此 $dbh 打开的任何语句中的
// 空字符串都将被转换为 NULL

POD 的现状和未来

PDO 现在仍相当不成熟,但是会快速成熟起来。在编写本文之时,我在本文中提到的任何内容都能够通过 PDO_OCI 驱动程序适用于 Oracle 8 或更高版本(在 Oracle 8.0 和 9.2 上测试过)。

已经计划增加以下主要特性,在不久将可以使用:

  • 使用 PHP 流的 LOB 支持。 使用绑定参数,您能够将任何流资源(如文件、套接字、HTTP 资源、压缩/筛选的流)作为输入或输出参数传递到在 LOB 上运行的查询中。与之相似,类型为 LOB 的输出参数将表现为 PHP 流,因此您可以使用 fread()、fwrite()、fseek() 和其他流函数来访问这些参数。此时,在 PDO 中根本没有 LOB 支持。
  • 持久性连接和缓存的预处理语句。 持久性连接使您能够避免在每个页面命中时打开和关闭数据库服务器连接。缓存的预处理语句又前进了一步,它使您能够持久保持查询的预处理版本以及数据库句柄。
  • 游标。 目前,PDO 只提供前向只读游标,但是将来会提供可滚动游标(需要基础驱动程序支持)、REF-CURSOR、使用游标进行定位更新,以及可更新滚动游标。
我们希望在 PHP 5.1 中默认启用 PHP 扩展(距此目标尚远),但是在此之前,我们希望能让 PDO 在 PHP 5.0 发布时稳定运行,但是我们日常工作中的压力稍稍拖延了这些工作。同时,通过 PECL 发布 PDO 使我们能够在收到问题报告时做出回应,并根据不同于 PHP 5.0 发布时间表的时间表发布修复版本,因此您在 PHP 5.1 发布前即可使用 PDO。

我们需要您的反馈

如果您试用了 PDO,并且发现了问题,请务必使用我们的错误跟踪软件将其报告给我们。如果您使用的是 Oracle 驱动程序,则请使用此页:

http://pecl.php.net/bugs/report.php?package=PDO_OCI

如果您使用的是其他驱动程序,则请用其名称替换该 URL 中 PDO_OCI。

如果您使用 PDO 时遇到问题,或者针对某些特性存在疑问,或者具有特性请求,请联系 pecl-dev@lists.php.net。如果您愿意,当然还可以直接联系我 (wez@php.net),但是请注意,我每天都会收到大量有关 PHP 的电子邮件;您可能会发现如果首先与前面的邮件列表联系会更快得到答复。


Wez Furlong 是 Brain Room Ltd. 的技术总监,他在该公司不但使用 PHP 用于 Web 开发,还将其用作 Linux 和 Windows 应用程序和系统的嵌入式脚本引擎。Wez 是 PHP 的核心开发人员,经常向 SQLite、COM/.Net、ActivePHP、mailparse 和 Streams API 等投稿,他是 PECL 即 PHP 扩展社区库的“头儿”。他的咨询公司的网页为 http://www.thebrainroom.net



 如果您对本文有任何疑问或者建议,请到讨论区发表您的意见: >> 论坛入口 <<



上一篇:可扩展 可伸缩的 Oracle 与 PHP   下一篇:来自PHP.NET的入门教程

文章评论】 【收藏本文】 【推荐好友】 【打印本文】 【我要投稿】 【论坛讨论
更多相关文章
Power by linux-cn.com 粤ICP备05006655号