@0x0AFD

Как обработать ошибку mysql подключения в PHP 8.1?

Переписываю проект на php 8.1, фатальная ошибка при попытке подключиться к mysql с заведомо неверными данными
$mysqli = new mysqli($dbhost, $dbuser, $dbpass);
if($mysqli->connect_errno) {
// Раньше код доходил сюда, теперь просто выводит ошибку
}

Fatal error: Uncaught mysqli_sql_exception: Access denied for user 'root'@'localhost' (using password: YES)
  • Вопрос задан
  • 1413 просмотров
Решения вопроса 1
FanatPHP
@FanatPHP
Чебуратор тега РНР
Ни в коем случае не надо совершать ни одно из телодвижений, предложенных Rsa97
Режим выброса исключений специально сделан, чтобы не писали этот говнокод из прошлого века.
Если в коде написано if($mysqli->connect_errno) {, это означает что никакой нормальной обработки ошибок там всё равно не было. И надо просто убрать этот бесполезный мусор. Поскольку вариант с исключением в сто раз информативнее и удобнее для обработки.
И у запросов тоже, кстати, надо поубирать всю тупизну с if($mysqli->error) или, того хуже, or die()

Если же интересует, как в принципе обрабатывать ошибки в РНР, то это другой вопрос.
Для локальной системы ничего менять не надо. Для боевой - включить логирование ошибок, выключить показ в браузер и в случае ошибки выводить стандартную страницу о временной недоступности сайта.

Тот редкий случай, когда действительно требуется именно обработка ошибки соединения, а не "die('что-то пошло не так')" мы здесь не рассматриваем, поскольку к моменту, когда программисту такое может понадобиться, он уже владеет базовыми приемами программирования и вполне разберётся сам.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
В PHP 8.1 режим ошибок MySQLi изменён с silent на exception.
https://www.php.net/manual/en/migration81.incompat...
Надо либо переключить режим явно через mysqli_report(MYSQLI_REPORT_OFF);, либо, что более правильно, использовать try ... catch.
https://www.php.net/manual/en/mysqli-driver.report...
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы