2017-08-09 54 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