Проверьте `mysqli :: errno` после запроса UPDATE, чтобы определить, является ли ошибка FATAL триггером или WARNING. - PullRequest
0 голосов
/ 30 января 2012

После запроса UPDATE с помощью mysql::query() я могу проверить mysqli::error или mysqli::errno, чтобы получить сообщение об ошибке или номер.

Это полезно для регистрации ошибки, но я должен решить, основываясь на серьезности ошибки, что делать.

  • Если это логическая ошибка (строка не существует, значения недействительны), я должен прервать выполнение.
  • Если база данных была недоступна или что-то подобное, я должен просто зарегистрировать ошибку, но не останавливать выполнение программы.

    1. Я могу проверить номер ошибки, например, ошибка 1054 возвращается, когда столбец неизвестен. Проблема состоит в том, что в mysql вручную перечислены около 1000 ошибок, поэтому проверить, какие из них актуальны, кажется неуместным и может быть очень рискованно, если я пропущу только одно условие ошибки, относящееся к проблеме.
    2. Другая проблема заключается в том, что строка не находится в таблице, поскольку ошибка не возвращается.

Каков общий подход к проверке этого состояния?

1 Ответ

1 голос
/ 30 января 2012

Сначала вы описываете свои ожидания, а затем спрашиваете, что общего.Я бы сказал, что обычно случается так, что если слой базы данных не может соединиться с базой данных, генерировать исключение базы данных.Таким образом, ясно, что на некотором системном уровне что-то не удалось.

Приложение, которое было написано для взаимодействия с базой данных, должно затем самостоятельно решить, как обращаться с этими исключениями базы данных.Обычно код, который ожидает, что база данных будет работать, не будет работать, если ее нет.

Теперь к случаям, которые вы называете логической ошибкой.Это зависит от многих.Я не буду концентрироваться на конкретном коде ошибки базы данных (который даже может со временем меняться, новые добавляются с новыми версиями, старые могут больше не использоваться).Вместо этого сконцентрируйтесь на том, соответствуют ли возвращаемые данные какой-либо операции вашим ожиданиям, и укажите такие значения на случай, если вы не сделаете этого до сих пор.

Например: если обновление имеет решающее значение, и вам необходимо убедиться, чтообновление прошло успешно, проверьте это.Но это не часть уровня базы данных, чтобы решить, было ли это важно или нет.Это часть кода вашего приложения, например, модель домена или сценарий транзакции .

. Сам Mysqli уже может выдавать некоторые исключения при определенных обстоятельствах, есть одно исключение срасширение:

class mysqli_sql_exception extends RuntimeException

Для ошибок подключения вам нужно будет выбросить свои собственные исключения.Поэтому проверяем возвращаемые значения и затем генерируем исключение из вашей базы данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...