За последние 24 часа нас посетили 8770 программистов и 852 робота. Сейчас ищет 351 программист ...

Проверять перед добавлением в БД или нет

Тема в разделе "PHP и базы данных", создана пользователем z3r9, 23 янв 2023 в 21:42.

  1. z3r9

    z3r9 Гость

    С нами с:
    Понедельник
    Сообщения:
    1
    Симпатии:
    0
    Здравствуйте. Такой вопрос при добавлении в БД может быть много исключительных ситуаций, например в БД есть уникальный индекс (типа когда 2 поля не должны повторятся), или там не может быть значение null и так далее.

    Может кто-то сталкивался, как лучше в таком случае действовать:
    1) проверять все возможные исключительные ситуации и потом добавлять уже без ошибок. Я понимаю когда исключительную ситуацию можно исправить, тогда конечно нужно в коде исправлять.
    2) Просто сразу добавлять запись в БД и отлавливать через try catch.

    Вопрос в том как лучше действовать, какие плюсы и минусы в этих способах?
     
  2. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.490
    Симпатии:
    1.731
    Ну чисто по user experience надо же пользователю что-то выдать вразумительное, поэтому лучше проверить. С другой стороны, если конкретно уникальность, можно доверить и БД, чтоб не делать лишний запрос. Есть сторонники этого, но я за проверку. Правда, я давно не пишу без фреймворков
     
  3. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    10.818
    Симпатии:
    1.171
    Адрес:
    там-сям
    или
    3) использовать добавление не вызывающее ошибку - insert ignore, insert on duplicate update, replace

    "лучше" — всегда зависит от контекста. чем именно лучше, для чего лучше...
    --- Добавлено ---
    если ситуация действительно ошибка, которой теоретически быть не должно, то это одна стратегия.
    если это в принципе рабочий момент и надо равильно его обработать, то другая.
     
    miketomlin нравится это.
  4. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.619
    Симпатии:
    603
    Вариант 2 для обычных ошибок. Для отлова дублей можно уточнить «обычную ошибку», либо, как выше написали, использовать insert ignore и тупо сравнивать кол-во вставляемых строк и реально вставленных. Реально вставленные обычно возвращаются ф-цией вставки. С одной записью как-то так:
    PHP:
    1. if (!wquery('insert ignore ...', ...)) // ==0 ?
    2. {
    3.   echo 'already exists';
    4. }
    Можно даже без исключений возвращать null/false при ошибке и 0 и т.д. в противном случае.