龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 数据库类 > Oracle 技术 >

利用PHP创建由Oracle驱动的SOAP服务(1)(4)

时间:2011-04-12 23:18来源:未知 作者:admin 点击:
分享到:
创建BookManager 类 现在,您已经熟悉了用 PHP 实施 SOAP 服务的所有内容,下面我们来讨论数据库。出于本手册的需要,我创建了一个名为 BookManager 的类。该

创建BookManager 类

现在,您已经熟悉了用 PHP 实施 SOAP 服务的所有内容,下面我们来讨论数据库。出于本手册的需要,我创建了一个名为 BookManager 的类。该类的作用将与前面示例中的 math 类相同,除了要与数据库进行交互,并提供一个 SOAP 服务,以允许您执行一般维护并查询本教程开头描述的书籍表。具体而言,BookManager 类将实施以下要公开为 SOAP 调用的方法: 

addBook($isbn, $author, $title, $price); 
// Adds a Book to the database
delBook($isbn); // Deletes a book by ISBN number
findBookISBNByAuthor($author);
 // Returns an array of ISBN numbers of books written by a         
// specific author
findBookISBNByTitle($title); 
// Returns an array of ISBN numbers of books whose title 
// matches the substring provided
getBookByISBN($isbn); 
// Returns the details of the book identified by ISBN
listAllBooks(); 
// Returns an array of all ISBN numbers in the database

尽管该类本身有其他几个方法,但只有上述六个方法是声明的公共方法(当然,除了构造函数以外),因而也是仅有的公开为 SOAP 服务的方法。虽然详细说明每个方法会超出本教程讨论范围(特别是它们在形式上基本相同),但出于完整性需要,我们来看一下 delBook() 方法: 

/**
 * Delete a book from the database by ISBN
 *
 * @param string $isbn The ISBN serial number of the book to delete
 * 
 * @return mixed SOAP Fault on error, true on success
 */
public function delBook($isbn) {

$query = "DELETE FROM books
                WHERE isbn = :isbn";

$stmt = oci_parse($this->getDB(), $query);

if(!$stmt) {
throw new SoapFault(-1, "Failed to prepare query (reason: " .  
                                         oci_error($stmt) . ")");
}

oci_bind_by_name($stmt, "isbn", $isbn, 32);

if(!oci_execute($stmt)) {
oci_rollback($this->getDB());
throw new SoapFault(-1, "Failed to execute query (reason: " . 
                                          oci_error($stmt) . ")");
}

oci_commit($this->getDB());

return true;
}

对于那些熟悉用于 PHP 的 Oracle API 的开发人员来说,上述方法应该很简单。对于其余开发人员来说,我们从 oci_parse() 方法开始来探究该函数的某些关键点。该方法以字符串的形式接受 SQL 查询(如果需要,在查询中包含每个变量的占位符),然后返回表示该查询的语句资源。在这里,该语句资源的占位符可以通过 oci_bind_by_name() 方法直接映射到 PHP 变量,该方法将接受语句、占位符名称、对应的 PHP 变量以及可选的当前最大列长度作为参数。一旦 PHP 将每个占位符绑定到一个 PHP 变量,就可以执行语句并获得结果了。当然,由于该操作是一个针对表的 write 操作,您可以通过将更改提交到数据库并返回成功状态,来成功完成函数执行。

为便于参考,下面是一个完整的 BookManager 类,以及使用该类公开 SOAP 服务的相应服务器脚本。 

精彩图集

赞助商链接