Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Как получить id записи которую я только что создал ???

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: Как получить id записи которую я только что создал ???
potkin
Отправлено: 22 Апреля, 2008 - 18:13:29
Post Id


Новичок


Покинул форум
Сообщений всего: 2
Дата рег-ции: Апр. 2008  


Помог: 0 раз(а)




Создаётся новая запись и полю "id" (auto_increment+PRIMERY) присваевается "следуещее" число. И мне надо это число "выловить" когда оно создаётся. Как бы это сделать ???


Заранее спасибо !!!
(Добавление)
Запись создаётся так:

mysql_query("INSERT INTO forum_mes (autor, email, www, mesы, mess_id) value ('".$name."', '".$email."', '".$www."','".$msg."', '".mysql_result($q1, 0, 0)."') ")
 
 Top
EuGen Администратор
Отправлено: 22 Апреля, 2008 - 18:22:07
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)






-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
SergeantPEPPER
Отправлено: 23 Апреля, 2008 - 08:48:24
Post Id



Частый гость


Покинул форум
Сообщений всего: 245
Дата рег-ции: Сент. 2007  
Откуда: Казань


Помог: 0 раз(а)




Сначала я тоже "вылавливал" id-шник последней вставленной записи, а потом нечаянно наткнулся на функцию mysql_insert_id Улыбка

С ней все просто:

CODE (text):
скопировать код в буфер обмена
  1. $id = mysql_insert_id ();


$id - это и есть ид последней вставленной записи (именно вставленной, поэтому пользоваться этой функцией желательно сразу же после запроса-вставки)
 
 Top
potkin
Отправлено: 24 Апреля, 2008 - 08:42:31
Post Id


Новичок


Покинул форум
Сообщений всего: 2
Дата рег-ции: Апр. 2008  


Помог: 0 раз(а)




Сенкью вери матч !!!!!


Но тем не мене, если одновременно создают новые записи несколько пользователей, то я могу "словить" и чужую запись ???
 
 Top
SergeantPEPPER
Отправлено: 24 Апреля, 2008 - 10:31:51
Post Id



Частый гость


Покинул форум
Сообщений всего: 245
Дата рег-ции: Сент. 2007  
Откуда: Казань


Помог: 0 раз(а)




Повторюсь: вылавливать ид-шник вставленной записи нужно СРАЗУ после самого запроса на вставку. Т.е. сначала идет sql запрос с INSERT, и тут же применяется mysql_insert_id.

Теоретически ошибка может возникнуть в том случае, когда в промежутке между этими двумя действиями будет произведен еще один INSERT запрос, но практически это почти невозможно. Шансы на это ОЧЕНЬ малы.
Улыбка

З.Ы. Промежуток между двумя подряд идущими действиями здесь будет составлять доли секунды, а вот если между этими действиями засунуть какой-нибудь "тяжелый" блок команд, тут конечно может случиться всякое

(Отредактировано автором: 24 Апреля, 2008 - 10:34:28)

 
 Top
valenok
Отправлено: 24 Апреля, 2008 - 11:44:57
Post Id



Здесь могла бы быть ваша реклама


Покинул форум
Сообщений всего: 4574
Дата рег-ции: Июль 2006  
Откуда: Israel


Помог: 3 раз(а)




Ничего подобного.
Запусти код

mysql_query( .. );
sleep(15);
echo mysql_insert_id ();

один за другим

или просто запусти, потом сотри ожидание и запусти ещё раз паралельно.
Скрипт который выполнял mysql_query раньше, возвращал insert_id меньший
несмотря на то что сама функция вызывалась по времени значительно позже
чем её паралель.

(Отредактировано автором: 24 Апреля, 2008 - 11:45:40)



-----
Truly yours, Sasha.
 
My status
 Top
EuGen Администратор
Отправлено: 24 Апреля, 2008 - 13:50:44
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




SergeantPEPPER
Вернется id, который "принадлежит" последнему запросу текущего соединения. А так как каждая копия процесса создаст свое соединение, то коллизии не будет и не смотря ни на какие задержки возвращаемый id будет корректным


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« SQL и Архитектура БД »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB