Должны ли вы всегда заканчивать mysql-запросы с помощью «или умереть?»

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

or die(mysql_error()); 

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

NO.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

 or die() 

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

EDIT: Чтобы уточнить, под «этим» я подразумеваю оператор or die ().

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

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