gpt4 book ai didi

php - x::prepare() 的声明应与 PDO::prepare 兼容

转载 作者:行者123 更新时间:2023-11-29 06:55:59 28 4
gpt4 key购买 nike

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

我在 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();

但是将准备好的语句与上述答案的类一起使用,它给了我:

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

有谁知道为什么吗?

谢谢。

最佳答案

因为 PDO::prepare 可以接受第二个参数,就像错误消息中所说的那样。由于您的类是 PDO 的子类,因此它不能放弃对 PDO 基类支持的内容的支持。

幸运的是,它很容易修复:

public function prepare($query, $options = NULL) # <-- add the argument
{
$this->checkConnection();
return parent::prepare($query, $options); # <-- and pass it on
}

关于php - x::prepare() 的声明应与 PDO::prepare 兼容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45597231/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com