Возможно, этот вопрос уже задан, но я не знаю, как его искать:Должен ли я проверить уникальное ограничение с помощью php?
У меня есть клиенты postgres-table «клиенты», и каждый клиент имеет свое собственное уникальное имя. Чтобы достичь этого, я добавил уникальное ограничение в этот столбец.
Доступ к таблице с php.
Когда пользователь пытается создать нового клиента с уже зарегистрированным именем, база данных говорит «Нарушение ограничения целостности», а php выдает ошибку.
Что я хочу сделать, это показать ошибку в поле ввода html: «Имя клиента уже принято», когда это произойдет.
Мой вопрос в том, как я должен это делать.
Должен ли я поймать PDO-исключение, проверьте, является ли код ошибки «УНИКАЛЬНЫМ НАРУШЕНИЕМ», а не отображает сообщение в соответствии с Exception-Message, или я должен проверять наличие дубликатов имен с дополнительным заявлением до того, попробуйте вставить новую строку?
Что лучше? Создание еще одного sql-оператора, или поиск и анализ кодов ошибок.
EDIT: Я использую транзакции, и я предпочитаю исключение для отката. Вопрос в том, должен ли я отфильтровывать уникальные нарушения, чтобы они не приводили к откату.
EDIT2: Если я использую исключение-метод, я должен был бы проанализировать исключение-сообщение для того, чтобы гарантировать, что единственное ограничение, на самом деле принадлежит «имя» -column.
Это все, что я получаю от за исключением:
["23505",7,"FEHLER: doppelter Schlüsselwert verletzt Unique-Constraint <customers_name_unique>\nDETAIL: Schlüssel <(name)=(test)> existiert bereits."]
Единственный способ получить информацию о столбце, чтобы проверить, если «customers_name_unique» существует (это название уникального-ограничения).
Но, как вы можете видеть, сообщение находится на немецком языке, поэтому выход зависит от системы/может быть изменен.
Возможно, вам стоит взглянуть на: http://stackoverflow.com/questions/7719039/php-duplicate-checking-before-insert – jmarceli