Новости
Документация
Download
Webboard
Поиск
FAQ/ЧаВо
Обратная связь




MySQL.RU - Webboard



Вернуться
регистрация пользователя (edart) 10/02/2006 - 11:42:08
      Re: регистрация пользователя (DNick) 10/02/2006 - 14:08:44
      Re: регистрация пользователя (edart) 10/02/2006 - 18:31:23
      Re: регистрация пользователя (edart) 10/02/2006 - 19:10:24
      Re: регистрация пользователя (DNick) 14/02/2006 - 19:04:45
      Re: регистрация пользователя (edart) 14/02/2006 - 19:35:47
      Re: регистрация пользователя (DNick) 14/02/2006 - 21:58:28
      Re: регистрация пользователя (edart) 17/02/2006 - 09:33:58
      Re: регистрация пользователя (DNick) 18/02/2006 - 11:35:23
      Re: регистрация пользователя (DNick) 18/02/2006 - 11:55:09
      Re: регистрация пользователя (edart) 20/02/2006 - 18:48:56

> Original message text:
> From: edart - 10/02/2006 - 11:42:08
> Subject:регистрация пользователя
> -----------------
> При регистрации пользователя через веб-форму посредством рнр-скрипта я делаю так:
> 1. получаю последний имеющий в таблице uid
> select max(uid) from users
> 2. Увеличиваю его на 1
> $new_uid = 'результат запроса' + 1
> 3. Регистрирую пользователя, т.е.
> insert into users set uid=$new_uid и блаблабла
>
> Разрабатывая скрипт на рнр для регистрации на фтп, понял, что вполне возможна ситуация одновременного получения одного и того же uid сразу несколькими пользователями. Что может привести к созданию одинакового uid'а. А это не есть хорошо.
>
> В приниципе сам uid уникален только внутри группы, т.е. uid+gid само по себе значение уникальное, хотя я не отслеживаю уникальность этой пары средствами сервера бд. Ключевое поле у меня userid фактически логин пользователя на доступ по фтп (использую proftpd with mysql на freebsd)
>
> Вероятно можно использовать auto_increment по полю uid. Но оно должно быть ключевое.
>
> Можно ли решить проблему без использования auto_increment. Например включением блокировки, однако не знаю как это правильно делать
>


From: DNick - 14/02/2006 - 19:04:45
Subject:регистрация пользователя
-----------------
Вопрос еще что ты реализовал.
Рассмотрим проблему 2, т.к. ты с нее и начал тему.

1. По результатам успешной регистрации, создается запись во временную таблицу, ну и записывается соответсвенно login, вычисленный uid и gid. Затем получаешь номер записи(last_insert_id), для того чтобы потом удалить эту запись.
2. Проверяешь есть ли в базе такие uid и gid. Если есть,(ну успели создаться за время между выборкой и созданием искусственной блокировки), то возможны варианты с выбором другой uid и gid.(Перез этим надо удалить созданную блокировку)
3. Если проверка 2 прошла, проверяешь количество блокировок на такой uid если больше 1(твоей), то см. решение коллизий в п.2
4. Если пункт 2 и 3 прошли, то можешь смело создавать запись в основной таблице.
5. После надо незабыть убить блокировку.

Вот краткий алгоритм разруливания проблемы дублирующих записей.
У меня он пока сбоев не допускает, в таблице уже более 10000 записей.

P.S. Если что могу написать подробнее, но т.к. я юзаю MYSQL не под пхп, то напишу в виде сырых скриптов и текст. изложения алгоритма.


[Это сообщение - спам!]

Последние сообщения из форума

Уважаемые посетители форума MySQL.RU!
Убедительная просьба, прежде чем задавать свой вопрос в этом форуме, обратите внимание на разделы:
- ответы на наиболее часто задаваемые вопросы - FAQ
- раздел документация
- раздел поиск по сообщениям форума и документации
Также, старайтесь наиболее подробно указывать свою ситуацию (версию операционной системы, версию MySQL, версию программного обеспечения, по которому возникает вопрос, текст возникающих ошибок, и др.)
Помните, чем конкретнее Вы опишете ситуацию, тем больше шансов получить реальную помощь.
 Имя:
 E-mail:
 Тема:
 Текст:
Код подтверждения отправки: Code
26601



РЕКЛАМА НА САЙТЕ
  Создание сайтов | |