声明x :: prepare()应该与PDO :: prepare兼容

时间:2017-08-09 17:35:09

标签: php mysql pdo

由于我连接到外部数据库,因此我需要一种方法,只有在必要时才会与数据库建立连接(如果有查询)。

我在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)兼容

有谁知道为什么?

感谢。

1 个答案:

答案 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
}