2017-08-09 13 views
0

私は外部データベースに接続するので、データベースへの接続が必要な場合にのみ行われる方法が必要です(クエリがある場合) 。x :: prepare()の宣言はPDO :: prepareと互換性があるはずです

私はStackOverflowの上でこの答えを見つけました:Auto connecting to PDO only if needed

それは完璧だと私はこの方法を採用しています。私はそれを行うためのきれいな方法だと思います。

は、ほとんどの場合、私は私のクエリ、例えばプリペアドステートメントを使用します:

$sth = $dbh->prepare("SELECT username FROM users WHERE username = :username"); 
$sth->bindParam(':username', $_POST['username'], PDO::PARAM_STR); 
$sth->execute(); 

しかし、上記の回答のクラスでプリペアドステートメントを使用して、それは私を与える:しかし、ここで問題です

Warning: PDO::prepare(): SQLSTATE[00000]: No error: PDO constructor was not called

Fatal Error: Call to a member function bindParam() on null

だからクラスに追加しました:

public function prepare($query) 
{ 
    $this->checkConnection(); 
    return parent::prepare($query); 
} 

そしてそれが動作します。しかし、それは私にこの警告を常に与える:

Strict Standards: Declaration of DB::prepare() should be compatible with PDO::prepare($statement, $options = NULL) in class_pdo.php on line 0

誰もが知っていますか?

ありがとうございました。

答えて

2

PDO::prepareは、エラーメッセージに記載されているように、2番目の引数を取ることができるためです。あなたのクラスはPDOのサブクラスなので、PDO基本クラスがサポートしているもののサポートを落とすことはできません。

はありがたいことに、それは修正するのは簡単です:

public function prepare($query, $options = NULL) # <-- add the argument 
{ 
    $this->checkConnection(); 
    return parent::prepare($query, $options); # <-- and pass it on 
} 
+0

こんにちは、提案のためのおかげで、私は今、気づくだけで一つのこと。 NULLを指定すると、 'PDO :: prepare()はパラメータ2が配列になることを期待し、nullは'与えられます。だから私は空の配列を挿入したNULLの代わりに、それは動作します。 – Keaire

関連する問題