日期:2006-09-28 作者:喜騰小二 來源:PHPChina
一、
DBQuery物件
現在,我們的DBQuery物件簡單地模仿一個存儲過程—一旦被執行,即返回一個必須進行儲存的結果資源;並且如果妳想使用該結果集上的函式(例如num_rows()或fetch_row())的話,妳必須傳遞MySqlDB物件。那麼,如果由DBQuery物件來實現MySqlDB物件(其設計目的是對一個執行查詢的結果進行操作)實現的函式,效果如何呢?讓我們繼續使用上一篇範例中的程式碼;並且讓我們假定,現在由DBQuery物件管理我們的結果資源。DBQuery類的源碼如清單1所示。
清單1.使用DBQuery類。
require 'mysql_db.php'; require_once 'query.php'; $db = new MySqlDb; $db->connect('host', 'username', 'pass'); $db->query('use content_management_system'); $query = new DBQuery($db); $query->prepare('SELECT fname,sname FROM users WHERE username=:1S AND pword=:2S AND expire_time<:3I'); try { if($query->execute("visualad", "apron", time()))->num_rows() == 1) { echo('Correct Credentials'); } else { echo('Incorrect Credentials / Session Expired'); } } catch (QueryException $e) { echo('Error executing query: ' . $e); } |
class DBQuery { ..... public function fetch_array() { if (! is_resource($this->result)) { throw new Exception('Query not executed.'); } return $this->db->fetch_array($this->result); } public function fetch_row() { if (! is_resource($this->result)) { throw new Exception('Query not executed.'); } return $this->db->fetch_row($this->result); } public function fetch_assoc() { if (! is_resource($this->result)) { throw new Exception('Query not executed.'); } return $this->db->fetch_assoc($this->result); } public function fetch_object() { if (! is_resource($this->result)) { throw new Exception('Query not executed.'); } return $this->db->fetch_object($this->result); } public function num_rows() { if (! is_resource($this->result)) { throw new Exception('Query not executed.'); } return $this->db->num_rows($this->result); } } |
public function __construct(DB $db) { $this->db = $db; } |