2017-08-09 74 views
0

兼容由於我建立了與外部數據庫的連接,我需要一種方法,只有在必要時才連接到數據庫(如果有查詢的話) 。x :: prepare()的聲明應該與PDO :: prepare

我發現在計算器上這樣的回答: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可以接受第二個參數,就像它在錯誤信息中說的那樣。由於你的類是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

相關問題