函式execute
最後,還需要建構函式execute(),函式execute()編譯query並且使用DB物件執行它,而DB物件在此是用於初始化DBQuery物件的。請注意在例4中,是如何運用函數call_user_func_array()來得到編譯後的query的,而這樣做的原因是,函數execute()要直到執行時,才能確定傳遞給它的參數數目。
例4:execute()函數
/** * * 执行当前query,并把占位符替换为所提供的参数。 * * @param mixed $queryParams,... Query parameter * @return resource A reference to the resource representing the executed query. */ public function execute($queryParams = '') { //例如:SELECT * FROM table WHERE name=:1S AND type=:2I AND level=:3N $args = func_get_args(); if ($this->stored_procedure) { /* 调用函数compile以取得query */ $query = call_user_func_array(array($this, 'compile'), $args); } else { /* 如果存储过程未被初始化,就把它作为标准query执行。*/ $query = $queryParams; } $this->result = $this->db->query($query); return $this->result; }
全部整合起來
為演示怎樣使用query對象,下面構造了一個小例子,其將把DBQuery對像作為存儲過程使用,並檢查怎麼使用了正確的用戶名與密碼,請看例5:
例5:
require 'mysql_db.php5'; require_once 'query2.php5'; $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'); if ($result = $query->execute("visualad", "apron", time())) { if ($db->num_rows($result) == 1) { echo('凭证正确。'); } else { echo('凭证不正确,会话已过期。'); } } else { echo('执行query时发生错误:' . $db->error()); }
在本文中,你已看到瞭如何在聲明類別變數時,利用存取修飾符private、protected和public,保護資料和限制資料物件的可見性,同時,在PHP 5中,這些概念也可用於其他的資料類,保護其重要的內部資料。
以上就是利用PHP的OOP特性實現資料保護(3)的內容,更多相關內容請關注PHP中文網(m.sbmmt.com)!