由于我与外部数据库建立了连接,因此我需要一种方法,即仅在必要时(如果有查询(才连接到数据库。
我在StackOverflow上找到了这个答案:仅在需要时自动连接到PDO。
这是完美的,我采用这种方法。我认为这是一种干净的方法。但问题是:
几乎总是我使用预准备语句进行查询,例如:
$sth = $dbh->prepare("SELECT username FROM users WHERE username = :username");
$sth->bindParam(':username', $_POST['username'], PDO::PARAM_STR);
$sth->execute();
但是使用带有上述答案类的准备好的陈述,它给了我:
警告:PDO::p repare((: SQLSTATE[00000]:无错误:未调用 PDO 构造函数
致命错误:在 null 上调用成员函数 bindParam((
所以我在课堂上添加了:
public function prepare($query)
{
$this->checkConnection();
return parent::prepare($query);
}
它有效。但它总是给我这样的警告:
严格的标准:DB::p repare(( 的声明应与 PDO::p repare($statement, $options = NULL( 在第 0 行的class_pdo.php兼容
有谁知道为什么?
谢谢。
因为PDO::prepare
可以接受第二个参数,就像错误消息中所说的那样。由于您的类是 PDO 的子类,因此它不能放弃对 PDO 基类支持的内容的支持。
值得庆幸的是,它很容易修复:
public function prepare($query, $options = NULL) # <-- add the argument
{
$this->checkConnection();
return parent::prepare($query, $options); # <-- and pass it on
}