関数execute
最後に、関数execute()を構築する必要があります。関数execute()はクエリをコンパイルし、DBQueryオブジェクトの初期化に使用されるDBオブジェクトを使用して実行します。例 4 では、コンパイルされたクエリを取得するために関数 call_user_func_array() がどのように使用されているかに注意してください。その理由は、関数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; }
すべて統合
クエリ オブジェクトの使用方法を示すために、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 中国語 Web サイト (www.php.cn) に注目してください。