如何解决OM \ Db :: querystring $ statement的声明必须与PDO :: query
我刚安装了PHP 8,并且出现此错误?我该如何解决?
致命错误:OM \ Db :: query(string $ statement)的声明必须与/ home /中的PDO :: query(string $ query,?int $ fetchMode = null,Mixed ... $ fetchModeArgs)兼容www / includes / OM / Db.php,第131行
我的OM / Db.php
public function query(string $statement) =====> line 131
{
$statement = $this->autoPrefixTables($statement);
$args = func_get_args();
if (count($args) > 1) {
$DbStatement = call_user_func_array(array($this,'parent::query'),$args);
} else {
$DbStatement = parent::query($statement);
}
if ($DbStatement !== false) {
$DbStatement->setQueryCall('query');
$DbStatement->setPDO($this);
}
return $DbStatement;
}
解决方法
要稍微扩大错误消息的范围,您类中query
函数的签名必须与PDO类中的父方法兼容。
在这里:
public function query(string $statement)
,父类具有以下内容:
public function query(string $query,?int $fetchMode = null,mixed ...$fetchModeArgs)
要使子类兼容,PHP要求在重写方法时在函数签名中定义所有个参数(包括可选参数)*
非常感谢,您的函数实现已经兼容,因为您始终将所有参数传递给父级。这意味着该解决方案非常简单:只需将类中的第131行更改为
public function query(string $query,...$fetchModeArgs)
你应该很好。
*早期版本的PHP对此发出了警告或严格的标准声明,但在PHP 8中已变成致命错误。请参见https://3v4l.org/uJYG1
,#1 - 从 Composer Json 中删除类似的行
"doctrine/dbal": "^2.10",
#2 - 运行
作曲家升级
#3 - 运行
作曲家更新
#4 - 瞧!错误应该被修复!
,遇到同样的错误,对我来说它有助于替换
公共函数查询(string $statement)
与
公共函数 runQuery(string $statement)
我在提示中得到了解决方案 here:
由于 PHP 8.0 对 LSP 的签名检查,DatabaseConnection::query 方法被重命名为 DatabaseConnection::runQuery。为了与 PHP 8.0 兼容,所有数据库驱动程序现在都需要重命名为该方法。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。