x::p repare() 的声明应该与 PDO::p repare 兼容

  • 本文关键字:repare PDO 兼容 声明 php mysql pdo
  • 更新时间 :
  • 英文 :


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

我在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
}

最新更新