由于我连接到外部数据库,因此我需要一种方法,只有在必要时才会与数据库建立连接(如果有查询)。
我在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();
但是使用带有上述答案类的预备语句,它给了我:
警告:PDO :: prepare():SQLSTATE [00000]:无错误:未调用PDO构造函数
致命错误:在null上调用成员函数bindParam()
所以我在课堂上添加了:
public function prepare($query)
{
$this->checkConnection();
return parent::prepare($query);
}
它有效。但它总是给我这个警告:
严格标准:DB :: prepare()的声明应该与第0行的class_pdo.php中的PDO :: prepare($ statement,$ options = NULL)兼容
有谁知道为什么?
感谢。
答案 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
}