Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Корректно ли использовать LAST_INSERT_ID() при последовательной вставке данных в две таблицы?
 
 автор: baston   (01.06.2010 в 12:50)   письмо автору
 
 

Ситуация: регистрация пользователей.
Новый пользователь добавляется в таблицу users (автоинкрементируемое поле id_user, как одно из полей таблицы). Одновременно нужно добавить и принадлежность данного пользователя к одной из групп пользователей (member). Для этого существует другая таблица user_group с двумя колонками: id_user и id_group. По умолчанию для этой таблицы в поле id_group установлено значение 3 (группа members).
Таким образом, нужно выполнить вставку данных в две таблицы. Я просто выполняю два запроса. При этом во втором запросе использую функцию LAST_INSERT_ID(), чтобы получить id именно последнего добавленного пользователя. Вот мои запросы:
    #  Добавляем нового пользователя в БД
    mysql_query("INSERT INTO `users` SET `user_login`='".$login."', `user_password`='".$password."', `user_date_reg`=NOW()");
    #  Вносим пользователя в группу members (по умолчанию)
    mysql_query("INSERT INTO `user_group` SET `id_user`=LAST_INSERT_ID();");

Вопрос: насколько корректно использовать указанную функцию в моем случае? Интересует с точки зрения вероятности одновременной регистрации нескольких пользователей - не будет ли тут сбоя с занесением данных во вторую таблицу?
Спасибо.

  Ответить  
 
 автор: Trianon   (01.06.2010 в 13:46)   письмо автору
 
   для: baston   (01.06.2010 в 12:50)
 

не будет.
То, что Вы написали - канонический пример применения функции LAST_INSERT_ID()
Если, конечно, закрыть глаза на некошерный синтаксис оператора INSERT.
C другой стороны, в кошерном варианте языка и функции-то такой нет :)

  Ответить  
 
 автор: HaJIuBauKa   (04.06.2010 в 10:46)   письмо автору
 
   для: baston   (01.06.2010 в 12:50)
 

Не будет, так как для каждого соединения (которое происходит при выполнении скрипта регистрации) создается отдельная сессия MySQL, в рамках которой и происходит вызов функции LAST_INSERT_ID(). Она возвратит в точности прошлый идентификатор вставленной записи за данную сессию-подключение.
Другое дело, если вы вставляете в две таблицы до вызова LAST_INSERT_ID(), но и в данном случае она вернет последний ИД. Просто нужно быть внимательнее с последовательностью вставки.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования