За последние 24 часа нас посетили 22685 программистов и 1221 робот. Сейчас ищут 750 программистов ...

Ошибка при регистрации пользователя Duplicate entry '' for key 'wmid'

Тема в разделе "PHP и базы данных", создана пользователем Alexis34rus, 19 май 2020.

  1. Alexis34rus

    Alexis34rus Новичок

    С нами с:
    19 май 2020
    Сообщения:
    5
    Симпатии:
    0
    Всем привет!

    Есть тестовый сайт, 1 пользователя регистрирует без проблем.
    Второго и последующего пользователя отказывается регистрировать, выдает ошибку:

    Duplicate entry '' for key 'wmid'


    Все облазил не могу найти решение, помогите пожалуйста...
     

    Вложения:

    • 6.JPG
      6.JPG
      Размер файла:
      17,8 КБ
      Просмотров:
      6
    #1 Alexis34rus, 19 май 2020
    Последнее редактирование модератором: 19 май 2020
  2. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.076
    Симпатии:
    1.237
    Адрес:
    там-сям
    Расскажи как "лазил". Помоему решение на поверхности — если не искать в гугле ошибку с wmid, а попытаться понять что написано.
    --- Добавлено ---
    http://phpfaq.ru/debug
     
  3. Alexis34rus

    Alexis34rus Новичок

    С нами с:
    19 май 2020
    Сообщения:
    5
    Симпатии:
    0
    Я так понимаю что создается значение которое уже есть в базе. Но не понимаю почему в 'Кавычках' пусто. И куда смотреть. Я новичок в этом деле....
     
  4. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.825
    Симпатии:
    738
    Адрес:
    Татарстан
    поле wmid в базе уникальное, и повторно не даст добавить такое же значение
     
  5. Alexis34rus

    Alexis34rus Новичок

    С нами с:
    19 май 2020
    Сообщения:
    5
    Симпатии:
    0
    Исправил в БД до импорта следующие строки:

    Код (Text):
    1. ADD PRIMARY KEY `wmid` (`wmid`),
    на

    Код (Text):
    1. ADD KEY `wmid` (`wmid`),
    Все заработало, пошла регистрация второго пользователя.

    Пробую зарегистрировать третьего пользователя, теперь появляется следующая ошибка:


    Код (Text):
    1. Duplicate entry '' for key 'pemail`
    Снова меняю в базе данных, т.е. убираю уникальность кода:

    Код (Text):
    1.   ADD UNIQUE KEY `pemail` (`pemail`),
    на

    Код (Text):
    1.   ADD KEY `pemail` (`pemail`),
    Импортирую базу...

    Регистрация 1 пользователя - успешно.
    Регистрация 2 пользователя - успешно.
    Регистрация 3 пользователя - успешно.
    Регистрация 4 пользователя - успешно.


    Теперь бы понять сам принцип до и после.

    После исправления я убрал уникальность ключу WMID и PEMAIL .
    --- Добавлено ---
    Но как он определяет значение ключу WMID если во время регистрации он нигде не задается (Нету соответствующей графы, куда необходимо ввести свой WMID) , т.е. по сути это поле должно оставаться пустым (так оно и есть в БД после регистрации пользователя - поле WMID у него пустое). Почему тогда возникает конфликт, якобы такая запись (пустая) в этом поле уже есть уже есть? 7.JPG
     
  6. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.076
    Симпатии:
    1.237
    Адрес:
    там-сям
    Сложнее всего объяснять очевидные вещи.
    Уникальный ключ может содержать только один экземпляр любого значения. Первичный ключ тоже является уникальным.

    Если ты в операции insert явно не указываешь значение некоего поля или указываешь пустое значение (null), то поле принимает значение по умолчанию. Даже не важно какое именно. Потому что оно всякий раз будет пытаться использовать одно и то же значение. И тут база натыкается на условие уникальности. Внезапно™
    --- Добавлено ---
    Вопрос: зачем тебе поля в таблице, которые ты даже не пытаешся заполнить значениями. Просто убери их если не нужны.
     
  7. Alexis34rus

    Alexis34rus Новичок

    С нами с:
    19 май 2020
    Сообщения:
    5
    Симпатии:
    0
    В том то и дело, что эти пустые поля в таблице, будут заполнять позже сами пользователи уже ПОСЛЕ регистрации, когда попадут в личный кабинет... А ВО ВРЕМЯ регистрации - поля остаются пустыми, на что и выдавался конфликт с записью в БД...
     
  8. lastdays

    lastdays Активный пользователь

    С нами с:
    27 сен 2012
    Сообщения:
    410
    Симпатии:
    74
    тогда и ставь по дефолту поля в Null например, чтобы можно было добавить запись с id, login без доп. параметров. Т.е. пусть там будут дефолтные параметрны. Типа name = 'имя' и все.
    Само собой, структура таблицы требует наличие каких-либо данных, а т.к. они пустые и не "приходят", то выдает тебе ошибку об этом.
     
  9. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.076
    Симпатии:
    1.237
    Адрес:
    там-сям
    Не якобы, а есть. Пустая строка это такое же значение как любая другая строка. Её нельзя повторять дважды, если поле уникально проиндексировано.
    --- Добавлено ---
    Ты уже знаешь как исправить ситуацию: достаточно отказаться от уникального индекса.
    --- Добавлено ---
    Другой вариант: сделать поле null-able и БЕЗ значения '' по умолчанию. Тогда поля, не указанные при вставке, будут по настоящему пустыми. Пустые значения не нарушают уникальность.

    Важно понимать, что пустая строка ('') и специальное значение "пусто" (null) это не одно и то же!

    Сравни:
    `x` varchar(255) DEFAULT NULL, -- может быть по настоящему пустым, пустые значения могут повторяться
    и
    `x` varchar(255) NOT NULL DEFAULT '', -- не может быть пустым, при уникальном индексе возможна только одна пустая строка в колонке
     
  10. Alexis34rus

    Alexis34rus Новичок

    С нами с:
    19 май 2020
    Сообщения:
    5
    Симпатии:
    0
    Все понял. Спасибо большое))