Почему мой код исключения catch не работает? - PullRequest
1 голос
/ 11 июля 2020

Я могу подключить базу данных и PHP, но если я намеренно испортил базу данных, код для улова не будет. Уловка не работает. Он только отображает предупреждение. Я также хотел бы знать, как от этого избавиться.

Это предупреждение, которое я получаю:

Предупреждение: mysqli :: __ construct (): (HY000 / 1049): Неизвестная база данных mytodsssssasdsdasdassdos в D: \ XAMPP \ htdocs \ projects \ index. php в строке 10

Что я делаю не так?

Вот мой PHP код

<?php
  
$user = 'root';
$password = '';
$db = 'mytodsssssasdsdasdassdos'; //real DB name is mytodos


try {
    $db = new mysqli('localhost', $user, $password, $db);
} catch (mysqli_sql_exception $e) {
    die (var_dump('Unable to Connect to the Database.'));
} //echo 'Connected.';

1 Ответ

4 голосов
/ 11 июля 2020

По умолчанию отчеты об ошибках для mysqli отключены. Единственная «ошибка», которую вы когда-либо получаете, - это предупреждение о невозможности установления соединения. Вы не можете поймать предупреждения в PHP с помощью try-catch. Однако есть очень простое решение. Включите отчет об ошибках должным образом, и вы сможете перехватывать все ошибки mysqli.

try {
    mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
    $db = new mysqli('localhost', $user, $password, $db);
} catch (mysqli_sql_exception $e) {
    // Do something with the exception here and rethrow it.
    throw $e;
}

Что касается несвязанной заметки, не похоже, что вам нужно что-то там ловить. Просто придерживайтесь стандартного способа подключения без ловли:

mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$db = new mysqli('localhost', $user, $password, $db);
$db->set_charset('utf8mb4');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...