加入收藏 | 设为首页 | 会员中心 | 我要投稿 焦作站长网 (https://www.0391zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

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

发布时间:2020-03-22 04:38:00 所属栏目:PHP教程 来源:互联网
导读:PHP 5 数据对象 (PDO) 抽象层与 Oracle

·从 #v5 获取 PHP 5,将其解压缩到 C:php5。
·从 和 分别获取 PDO 和 PDO_OCI,将其放入 C:php5ext。或者,您可以从 PHP 5 下载页上列出的“用于 PHP 5.0.0 的 PECL 模块集合”zip 文件中找到所有这些 PDO 驱动程序,以及所有 PECL 程序包的所有 Windows 版本。
·编辑 C:php5php.ini 文件,并添加下列内容:

extension=php_pdo.dll
extension=php_pdo_oci.dll

编辑 php.ini 文件时,有一点很重要,即要在任何其他 PDO 驱动程序之前先加载 PDO 扩展,否则就不能正确初始化(在这种情况下会出错)。

如果在 Windows 目录中有一个 PHP 4 的全局 php.ini 文件,则可能会遇到问题。最好的解决方法是,移动该 php.ini 文件,使其与 PHP 4 SAPI 位于相同的文件夹中,以隔离 PHP 4 安装;例如,将其移动到与 php4apache.dll 相同的文件夹中。请注意,PHP 5 程序中并非所有文档都是最新的;推荐的安装过程如上面所述 - 如 install.txt 文件所声明的,请勿将任何 DLL 复制到 windows 文件夹或 system 文件夹中 - 任何内容都是自包含的。如果您运行的是 apache,并且遇到无法加载 DLL 的错误,则检查一下是否将 C:php5 添加到了 PATH 中。另外,还要注意 PHP 5 的 CGI 版本现在的名称为 php-cgi.exe。


连接 PDO


首先创建 PDO 类的一个实例,将其用作数据库句柄。使用哪个基础驱动程序并不重要;您总要使用 PDO 类名。构造函数的第一个参数为数据源名称 (DSN),第二个参数为用户名,第三个参数为该用户名的口令。DSN 的 PDO 命名惯例为 PDO 驱动程序的名称,后面一个冒号,再后面是可选的驱动程序特定的信息。在我们的示例中,会加载 OCI 驱动程序但不指定任何其他信息;这样会使用默认的数据库。对于其他驱动程序,如 ODBC 驱动程序,第一个冒号后面的所有内容都将被用作 ODBC DSN。MySQL 驱动程序会同样以不同的方式解释它的 DSN。

如果无法加载该驱动程序,或者发生了连接失败,则会抛出一个 PDOException,以便您可以决定如何最好地处理该故障。


<?php
try {
$dbh = new PDO("OCI:", "scott", "tiger");
} catch (PDOException $e) {
echo "Failed to obtain database handle " .$e->getMessage();
    }
?>


在连接字符串中,您可以指定两个可选参数;第一个是数据库名称,第二个是字符集;这些参数与可选的第三个和第四个参数相对应,后两个参数您可能在 oci8 扩展函数 ociconnect() 或 ociplogon() 中使用过。要使用特定的字符集连接一个特定的数据库,则可以执行下列操作:


<?php
try {
$dbh = new PDO("OCI:dbname=accounts;charset=UTF-8", "scott", "tiger");
} catch (PDOException $e) {
echo "Failed to obtain database handle " .$e->getMessage();
    }
?>


省略 try..catch 控制结构并无裨益。如果在应用程序的较高级别没有定义异常处理,则在无法建立数据库连接的情况下,该脚本会终止。


连接管理


目前,PDO 完全没有执行自己的任何连接管理,因此每个“新 PDO”调用都会建立一个新的数据库连接。该连接在 $dbh 变量越界时,或者当您为其指定 NULL 值时会被释放。


<?php
try {
$dbh = new PDO("OCI:dbname=accounts;charset=UTF-8", "scott", "tiger");
} catch (PDOException $e) {
echo "Failed to obtain database handle " .$e->getMessage();
exit;
    }
// 在此处对数据库执行一些操作
    // ...

// 现在完成,释放该连接
$dbh = null;
?>


计划在不久的将来为 PDO 增加连接缓存功能;就当前的 oci8 扩展而言,会重用与现有服务器的连接,并且在这些连接中,还会重用闲置的登录。当在缓存连接模式中运行时,如上面的代码段所示释放 $dbh 时会将该登录标记为可由其他连接重用。

如果您使用 ODBC 驱动程序访问 Oracle,则可能会很高兴地注意到,默认情况下 PDO_ODBC 驱动程序支持 ODBC 连接池。


使用 PDO


了解一个编程 API 的最好方式就是使用它,因此我们来看一下附带的这个演示,以了解如何进行批次更新(代码如下)。


<?php

// Create a PDO database handle object
// the 'oci:' string specifies that the OCI driver should be used
// you could use 'oci:dbname=name' to specify the database name.
// The second and third parameters are the username and password respectively
$dbh = new PDO('oci:', 'scott', 'tiger');

// Create a test table to hold the data from credits.csv
$dbh->exec("
CREATE TABLE CREDITS (
 extension varchar(255),
 name varchar(255)
)");

// start a transaction
$dbh->beginTransaction();

// prepare to insert a large quantitiy of data
$stmt = $dbh->prepare("INSERT INTO CREDITS (extension, name) VALUES (:extension, :name)");

// bind the inputs to php variables; specify that the data will be strings
// with a maximum length of 64 characters
$stmt->bindParam(':extension', $extension, PDO_PARAM_STR, 64);
$stmt->bindParam(':name',   $name,  PDO_PARAM_STR, 64);

(编辑:焦作站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读