快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-25
MySQL)模拟预处理语句和绑定参数。这是 PHP 向前迈进的积极一步,因为这样可以使开发人员能够用 PHP 编写“企业级”的数据库应用程序,而不必特别关注数据库平台的能力。

使用 PDO 预处理语句非常简单,调用数据库句柄的 prepare() 方法即可。它会返回一个语句句柄对象,然后您可以使用该对象来绑定参数和执行语句。在此示例中,我们将要定义两个命名占位符,“:extension”和“:name”,这两个占位符分别与 .CSV 文件中的 PHP 扩展名称和其中一个作者的姓名相对应。


$stmt = $dbh->prepare("INSERT INTO CREDITS (extension, name) VALUES (:extension, :name)");


预处理了语句之后,我们使用 bindParam() 方法来将这些命名参数分别与 PHP 变量名称“$extension”和“$name”相关联(这与 ocibindbyname() 类似)。我们还会通知 Oracle,这些数据将要格式化为字符串,最大长度为 64 个字符。


$stmt->bindParam('':extension'', $extension, PDO_PARAM_STR, 64);
$stmt->bindParam('':name'',      $name,      PDO_PARAM_STR, 64);


我们现在即准备好插入数据了 - 我们只需要打开该 CSV 文件,并从中获取数据即可。通过使用 fopen() 和 fgetcsv() 函数可以相当简单地完成此操作。然后,我们可以使用 PHP list() 构造函数直接将 CSV 的列指定给变量“$extension”和“$name”。因为这些变量已经绑定到了语句中,所以我们现在要做的只是调用该语句对象的 execute() 方法使其执行插入。这种方式既方便又快捷 - 在事务处理时每个迭代循环只有两行。到达文件尾时,我们就可以立即使用数据库句柄的 commit() 方法来提交这些更改了。

如果您只是要传递输入参数,并且有许多这样的参数要传递,那么您会觉得下面所示的快捷方式语法非常有帮助;此语法使您能够省去对 $stmt->bindParam() 的调用。


$stmt = $dbh->prepare("INSERT INTO CREDITS (extension, name) VALUES (:extension, :name)");
$stmt->execute(array('':extension'' => $extension, '':name'' => $name));


您还可以使用 bindParam 来为存储过程设置输入/输出参数;语法是完全相同的,只是查询有所不同。下面的代码演示如何调用一个名为“sp_add_item”的存储过程;其目的是要针对输入设置 $item_name,然后该存储过程将在返回时更新 $error_code。


$stmt = $dbh->prepare("begin sp_add_item(:item_name, :error_code); end");
$stmt->bindParam('':item_name'', $item_name, PDO_PARAM_STR,  12);
$stmt->bindParam('':error_code'', $error_code, PDO_PARAM_STR, 12);
$stmt->execute();

 


抓取数据


使用 PDO 抓取数据与进行插入或更新相似,只是您执行完查询之后,将要重复调用 fetch() 方法来获取结果集的下一行。进行获取的最简单情况如下所示,值得注意的一点是,您还可以将参数绑定到查询,以控制如 WHERE 子句这样的内容;执行此操作的语法与我们已经看到的 bindParam() 代码完全相同。

 

$stmt = $dbh->prepare("SELECT extension, name from CREDITS");
if ($stmt->execute()) {
while ($row = stmt->fetch()) {
print_r($row);
    }
}


PDO 支持一些不同的抓取策略,这些策略在方便性和性能方面有所差别;通过将下列选项之一指定为 fetch() 方法的参数,您可以更改其返回值以适应您的语法:


·PDO_FETCH_NUM - 每个行抓取返回一个按照列位置索引的数组,并且以 0 为基数(第一列是第 0 个元素)。

while ($row = $stmt->fetch(PDO_FETCH_NUM)) {
 printf("Extension %s, by %s<br>", $row[0], $row[1]);
}

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号