getmanrus
@getmanrus
Начинающий разработчик

Ошибка подключения к mysql. Почему?

В версии php 7 на данный код не ругается
function query($sql, $params = []) {
		$stmt = $this -> prepare($sql);
		$stmt -> execute($params);
		return $stmt;
	}

но стоит мне сменить на версию php 8 вылетает ошибка
Fatal error: Declaration of PDO_::query($sql, $params = []) must be compatible with PDO::query(string $query, ?int $fetchMode = null, mixed ...$fetchModeArgs) in

с чем может быть это связано? Использую подготовленные запросы к бд типа:
DB::$dbs->query("SELECT `name` ORDER BY `time` DESC LIMIT 1")->fetchAll(PDO::FETCH_BOTH);
  • Вопрос задан
  • 533 просмотра
Решения вопроса 2
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
https://kinsta.com/blog/php-8/#incompatible-method...
Кратко: в PHP 8.0 метод класса-потомка (в вашем случае PHP_::query) должен иметь ту же сигнатуру, что и совпадающий по имени метод класса-родителя (PHP::query). Раньше такая ситуация вызывала только предупреждение, теперь ошибку.
Ответ написан
FanatPHP
@FanatPHP
Чебуратор тега РНР
В принципе Rsa97 уже все написал, но хочу подчеркнуть, что function query изначально было дурацкой идеей.
Функция-то правильная, но вот название надо было давать другое.

А, главное, если всё равно используется свой класс DB, то какой смысл было екстендить PDO, становится совсем непонятно.
Ведь написать DB::query( тупо проще чем DB::$dbs->query(
И с архитектурной точки зрения так будет в миллион раз правильнее.
Ну это если не считать что сам по себе статический класс DB это решение так себе. Но для процедурщины сойдет.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы