0

ユーザー名が既に存在するかどうかを確認する登録スクリプトを作成しています。まず、データベース インスタンスを から に取得する際に問題がdatabaseconnection.php発生しましたregistration.php。これはエラーでした: Call to undefined method DatabaseConnection::prepare() .

しかし、今、私はprepare()行を過ぎており、値をクエリに渡したいと思っていますがbindValue()、この次のエラーは、「オブジェクト以外のメンバー関数 bindValue() への呼び出し」です。

これは、正しいデータベース インスタンスではなく、databaseconnection.phpクラスのインスタンスを取得したことを意味しますか?

これはdatabaseconnection.php

    <?php
class DatabaseConnection {

    private static $instance = null;
    public $db_connection;

    private function __construct(){
        try{
            $this->db_connection = new PDO('mysql:host='. DB_HOST .';dbname='. DB_NAME, DB_USER, DB_PASS);
            $this->db_connection->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
            return true;
        } catch (PDOException $exception){
                $this->errors[] = $this->lang['Database error'];
            return false;
        }
    }
    public static function getInstance(){
        if(self::$instance === null){
            self::$instance = new DatabaseConnection();
        }
        return self::$instance;
    }

    public function __call($method, $args) {
       $callable = array($this->pdo, $method);
       //is_callable, verify that the contents of a variable can be called as a function
       if(is_callable($callable)) {
           return call_user_func_array($callable, $args);
       }
   }
}

?>

このregistration.phpコードを使用して、インスタンスをローカルのプライベート変数に取得します。

class Registration

{
    private $db_connection = null;


        public function __construct()
    {
        $this->db_connection = databaseConnection::getInstance();
                ...
    }
...
}

そして、このクエリを で実行できるようにしたいと考えていますregistration.php:

...
        $check_username_query = $this->db_connection->prepare('SELECT user_name, user_email FROM users WHERE user_name=:user_name OR user_email=:user_email');
        $check_username_query->bindValue(':user_name', $user_name, PDO::PARAM_STR);
        $check_username_query->bindValue(':user_email', $user_email, PDO::PARAM_STR);
        $check_username_query->execute();
        $results = $check_username_query->fetchAll();
...
4

1 に答える 1

0
$callable = array($this->pdo, $method);

あなたはPDOのインスタンスを持って$this->db_connectionいません$this->pdo

于 2014-01-05T21:51:58.737 に答える