Возврат значения ID из запроса INSERT

Ashotovich

Новичок
Возврат значения ID из запроса INSERT

Всем привет.
Подскажите, пожалуйста, как произвести вовзврат значения ID из "свежевыполненного" запроса типа "INSERT INTO tablename VALUES ('','$value')", где пустое значение '' соответствует как раз искомому столбцу ID и имеет свойство AUTO_INCREMENT.

В Оракле, например, такая штука решалась следующим образом:
PHP:
$query="INSERT INTO tablename VALUES ('','$value') RETURNING ID INTO :id";
.............
OCIBindByName($stmt,":id",&$id,32); //Это, стало быть, переменной $id в скрипте присваивается значение переменной :id из запроса
А вот как вытащить значение поля в MySQL - не знаю. В списке функций, по крайней мере, ничего похожего на OCIBindByName не нашел.

Заранее спасибо за помощь.
С уважением, Ashotovich
 

Ashotovich

Новичок
Хм. Может я чего не понимаю, но не может ли случиться ситуации, что при наличии множества запросов к базе от многих пользователей, какой-нибудь другой пользователь вклинится со своим INSERT между искомым INSERT и вызовом функции mysql_insert_id()? Или MySQL как-то блокирует базу?
 

fixxxer

К.О.
Партнер клуба
Читаем по ссылке внимательно:

int mysql_insert_id ( [resource link_identifier])

т.е.

$res = mysql_query(...);
if ($res)
$id = mysql_insert_id($res);
else
// error
 

Ashotovich

Новичок
А, ферштейн. Я просто сразу начал в примерах копаться, а там это самый идентификатор не используют (обходятся как-то хитро).
Спасибо! Щас буду пробовать. =)
 

Ashotovich

Новичок
Да нет, не работает такая схема. Пишет мне, что "Warning: mysql_insert_id(): supplied argument is not a valid MySQL-Link resource". То есть $res он не воспринимает как надо. Вот.

Есть еще идеи?
 

Ashotovich

Новичок
В смысле, что если я пишу $query = "INSERT INTO....", а затем - $id=mysql_insert_id(), то все получается. Но меня смущает одно - как я уже говорил, при наличии множества запросов в секунду как бы чужой INSERT не вклинился между моим INSERT и вызовом mysql_insert_id(), так, что ID в итоге вычислится чужой, т.е. неправильный.

Хелп! =)
 

Апельсин

Оранжевое создание
Ashotovich, ты бы сначала полез в документацию и почитал как работает функция last_insert_id() в MySQL или ее пхпшный аналог mysql_insert_id() и твой вопрос отпадет сам собой.
 

Ashotovich

Новичок
Все. Я понял. Это меня уважаемый Fixxxer в заблуждение ввел. Там же русским по белому написано - "resourse link identifier", так что недо было не $id = mysql_insert_id($res) писать, а $id = mysql_insert_id($link).

Всем спасибо за помощь, извините за ламеризм. ;)
 

Ashotovich

Новичок
Угу. Представь, что в базе работают в сутки 300 человек. И так уж получилось, что пока шел запрос, в систему зашел еще один человек. Чей линк будет последним? Правильно, этого "левого" человека. Посему стоит застраховаться и указать именно тот линк, который открыт нужным пользователем. Это все при условии, что MySQL не блокирует таблицу, пока к ней обращается кто-нибудь один (мало ли, может так все реализовано...).
 

tony2001

TeaM PHPClub
>Чей линк будет последним?
у тебя
в скрипте
всегда
уникальный
коннект
один скрипт - один человек
у человека ВСЕГДА уникальный коннект

два скрипта использовать один коннект не могут - у тебя же переменные между скриптами не ходят как призраки коммунизма?
 

Ashotovich

Новичок
Стоп. Речь идет не об уникальности коннекта (то, что у каждого пользователя уникальный идентификатор коннекта я знаю), а о последнем коннекте скрипта к базе. Ведь в мануале указано: "If link_identifier isn't specified, the last opened link is assumed.". Таки ведь не указано, чей last opened link... Что имеется в виду - последний коннект в данной сессии, из данного скрипта, вообще последний коннект к БД? Объясните, плиз.
 

tony2001

TeaM PHPClub
>If link_identifier isn't specified, the last opened link is assumed
последний коннект, который был установлен в данном скрипте.
 

Ashotovich

Новичок
Имеется в виду то, что при вызове скрипта ему присваивается в памяти сервера уникальный идентификатор и от него все пляшет? Тады ой - этого я не знал. Думал, что все связано только с файлом скрипта, а кто к нему обращается - сервер не шибко различает (разве что по UID сессии). Ну так век живи - век учись. ;)

Спасибо всем! :)
 
Сверху