Как поймать ошибку соединения MySQLi?

Дано:
Заведомо ошибочное подключение к БД:
$db = new mysqli('db_host', 'db_user', 'db_pass', 'db_name');
if ($db->connect_errno) error_handler(E_USER_ERROR, 'Текст ошибки', '', '', array(), 'MYSQL');

Кастомный обработчик ошибок, который пишет в базу:
$log = new mysqli('log_host', 'log_user', 'log_pass', 'log_name');


Проблема:
Так как первый вызов бросает ошибку подключения (некритическую), перед проверкой происходит еще одно соединение с базой, после чего "$db->connect_errno" отдает "0" - нет ошибок.
Подскажите, правильная ли это работа?
И как в таком случае ловить ошибки в запросах?
  • Вопрос задан
  • 2617 просмотров
Пригласить эксперта
Ответы на вопрос 2
FanatPHP
@FanatPHP
Чебуратор тега РНР
Запоминаем волшебную строчку для работы с mysqli:
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

Писать перед коннектом.
Отлавливает ошибки не только коннекта, но и запросов.

А функцию error_handler() надо выкинуть - она вредная и ненужная.
Равно как и идея писать ошибки БД в базу данных.
Не надо выпендриваться. Пишите в лог как все.
Ответ написан
t-alexashka
@t-alexashka
Сразу пишу legacy код
echo $db->error , PHP_EOL, $log->error;
Ответ написан
Ваш ответ на вопрос

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

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