PDO, как получить дубликат имени ключевого столбца для INSERT в базе данных MySQL? - PullRequest
2 голосов
/ 12 января 2012

Извините, если раньше задавались эти вопросы, но я долго не мог найти ответ.

Проблема заключается в попытке вставить строку в таблицу MySQL с несколькими уникальными ключами. Если взять в качестве ссылки следующую таблицу:

----------------------------------------
|   id   | username |      email       | 
----------------------------------------
|    1   | myuser   | test@test.com    |
----------------------------------------

Оба имя пользователя и email являются УНИКАЛЬНЫМИ ключами. Если я выполню запрос для вставки новой строки с username = 'myuser', я получу ошибку 1062 для дублирующейся записи и некоторый текст в сообщении о том, что ключ с id 3 дублирован. Примерно так:

array(3) {
  [0]=>
  string(5) "23000"
  [1]=>
  int(1062)
  [2]=>
  string(34) "Duplicate entry 'myuser' for key 3"
}

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

Поскольку случаи таковы, что оба поля могут быть дублированы, или только первое / второе, и мне нужно сообщить пользователю, какое именно поле.

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

Или, может быть, лучший вариант - ВЫБРАТЬ все значения, которые являются ключами, чтобы проверить их перед INSERT?

Спасибо!

Ответы [ 2 ]

4 голосов
/ 12 января 2012

Нет, лучшего способа получить сообщение об ошибке с информацией о том, в какой таблице происходит сбой, нет.Сообщение, которое вы видите в массиве «Дублирующая запись« myuser »для ключа 3» - это почти та информация, которую вы хотите.Число 3 на самом деле является названием индекса, который вы сделали.Вы можете изменить его на более значимое, например «имя пользователя», и получить более качественное сообщение об ошибке, которое вы можете переслать пользователю.Если вы хотите создавать собственные сообщения об ошибках, вы должны извлечь нужную информацию из этого сообщения.

1 голос
/ 15 мая 2012

Согласитесь, нет способа получить полезный отчет об УНИКАЛЬНОЙ ошибке.Действительно лучшим решением является вызов SELECT до INSERT и обработка результата самостоятельно.Это будет влиять на производительность, но большинство приложений вставляют реже, так что вам может сойти с рук.

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