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
Форумы портала PHP.SU :: Версия для печати :: Как получить id записи которую я только что создал ???
Форумы портала PHP.SU » PHP » SQL и Архитектура БД » Как получить id записи которую я только что создал ???

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

1. potkin - 22 Апреля, 2008 - 18:13:29 - перейти к сообщению
Создаётся новая запись и полю "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)."') ")
3. SergeantPEPPER - 23 Апреля, 2008 - 08:48:24 - перейти к сообщению
Сначала я тоже "вылавливал" id-шник последней вставленной записи, а потом нечаянно наткнулся на функцию mysql_insert_id Улыбка

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

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


$id - это и есть ид последней вставленной записи (именно вставленной, поэтому пользоваться этой функцией желательно сразу же после запроса-вставки)
4. potkin - 24 Апреля, 2008 - 08:42:31 - перейти к сообщению
Сенкью вери матч !!!!!


Но тем не мене, если одновременно создают новые записи несколько пользователей, то я могу "словить" и чужую запись ???
5. SergeantPEPPER - 24 Апреля, 2008 - 10:31:51 - перейти к сообщению
Повторюсь: вылавливать ид-шник вставленной записи нужно СРАЗУ после самого запроса на вставку. Т.е. сначала идет sql запрос с INSERT, и тут же применяется mysql_insert_id.

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

З.Ы. Промежуток между двумя подряд идущими действиями здесь будет составлять доли секунды, а вот если между этими действиями засунуть какой-нибудь "тяжелый" блок команд, тут конечно может случиться всякое
6. valenok - 24 Апреля, 2008 - 11:44:57 - перейти к сообщению
Ничего подобного.
Запусти код

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

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

или просто запусти, потом сотри ожидание и запусти ещё раз паралельно.
Скрипт который выполнял mysql_query раньше, возвращал insert_id меньший
несмотря на то что сама функция вызывалась по времени значительно позже
чем её паралель.
7. EuGen - 24 Апреля, 2008 - 13:50:44 - перейти к сообщению
SergeantPEPPER
Вернется id, который "принадлежит" последнему запросу текущего соединения. А так как каждая копия процесса создаст свое соединение, то коллизии не будет и не смотря ни на какие задержки возвращаемый id будет корректным

 

Powered by ExBB FM 1.0 RC1