Здравствуйте. Такой вопрос при добавлении в БД может быть много исключительных ситуаций, например в БД есть уникальный индекс (типа когда 2 поля не должны повторятся), или там не может быть значение null и так далее. Может кто-то сталкивался, как лучше в таком случае действовать: 1) проверять все возможные исключительные ситуации и потом добавлять уже без ошибок. Я понимаю когда исключительную ситуацию можно исправить, тогда конечно нужно в коде исправлять. 2) Просто сразу добавлять запись в БД и отлавливать через try catch. Вопрос в том как лучше действовать, какие плюсы и минусы в этих способах?
Ну чисто по user experience надо же пользователю что-то выдать вразумительное, поэтому лучше проверить. С другой стороны, если конкретно уникальность, можно доверить и БД, чтоб не делать лишний запрос. Есть сторонники этого, но я за проверку. Правда, я давно не пишу без фреймворков
или 3) использовать добавление не вызывающее ошибку - insert ignore, insert on duplicate update, replace "лучше" — всегда зависит от контекста. чем именно лучше, для чего лучше... --- Добавлено --- если ситуация действительно ошибка, которой теоретически быть не должно, то это одна стратегия. если это в принципе рабочий момент и надо равильно его обработать, то другая.
Вариант 2 для обычных ошибок. Для отлова дублей можно уточнить «обычную ошибку», либо, как выше написали, использовать insert ignore и тупо сравнивать кол-во вставляемых строк и реально вставленных. Реально вставленные обычно возвращаются ф-цией вставки. С одной записью как-то так: PHP: if (!wquery('insert ignore ...', ...)) // ==0 ? { echo 'already exists'; } Можно даже без исключений возвращать null/false при ошибке и 0 и т.д. в противном случае.