Должны ли вы всегда заканчивать MySQL запросы с "или умереть?" - PullRequest
6 голосов
/ 25 января 2010

Примеры запросов в некоторых уроках ВСЕГДА заканчиваются на:

or die(mysql_error());  

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

Ответы [ 6 ]

13 голосов
/ 25 января 2010

NO.

Избегайте , что любой ценой!

  1. Это ужасное сообщение, чтобы показать конечному пользователю
  2. mysql_error может предоставить информацию, которую вы не хотите получать
  3. Нет способа обработать ошибку, т. Е. Отменить.

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

Сначала переводят деньги из X в Y и добиваются успеха. Второй должен вычесть Y из X fail .

У вас нет возможности отменить транзакцию, и ошибка не регистрируется. Эффективно осчастливив пользователя Y и оставив Х в замешательстве, куда пошли деньги ...

Используйте разумную обработку ошибок для запросов - либо создайте класс, который будет обрабатывать это для вас, либо используйте ORM.

1 голос
/ 25 января 2010

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

Если вы имеете в виду «что ж, это не сработает», что произойдет, если сервер базы данных отключится?

Только если вы имеете в виду «Неважно, выйдет из строя или нет, скрипт может продолжаться без проблем», что вы должны учитывать отсутствие or die там.

0 голосов
/ 03 июня 2011

Я думал, что не мешало бы использовать его в верхней части ваших страниц, где бы вы ни находились с информацией о подключении к базе данных. Используйте ее при попытке подключения только к базе данных.

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

0 голосов
/ 25 января 2010

Вам не обязательно нужно

or die()

Но у вас должна быть какая-то система обработки ошибок. Если у вас его еще нет, я бы добавил его к своим запросам, даже к простым.

РЕДАКТИРОВАТЬ: Чтобы уточнить, под "это" я имею в виду оператор или die ()

0 голосов
/ 25 января 2010

но они даже используют это для запросов, которые действительно не должны вызывать проблемы

Даже самый простой SELECT * FROM FOO может вызвать проблему, если сеть между веб-сервером и сервером базы данных падает. Это хорошая практика, потому что при работе с внешними системами, такими как базы данных, вы никогда не сможете предположить, что что-то «безопасно».

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

0 голосов
/ 25 января 2010

Слово «не должно» здесь плохо. На запросы, которые не должны иметь проблем, все еще могут влиять внешние факторы, например, соединение с базой данных прерывается.

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