![]() |
Mysql INSERT как узнать какой ID записался? Добрый день! Хочу сделать простой скрипт php: заполняем данные, добавляются в базу, выводим надпись "инфо добавлено! id записи Х". Где ID идентификатор записи, auto_increment и с добавлением новой записи в базу автоматически повышается на 1. Решил так: сначала считываем какой в базе есть последний ID, добавляем запись, выводим предыдущий ID + 1. Есть ли еще решения? |
Можно такой запрос SHOW TABLE STATUS FROM `имя_базы` LIKE 'имя_таблицы' в результирующем ряду данных будет столбец "Auto_increment", содержащий значение следующего Auto_increment, которое будет присвоено вставляемой записи. |
есть ф-я, выводящая ID последней добавленной записи. |
3-Ipro >а по подробнее можно? что это за функция? |
3-Ipro >Спасибо за наводку! Оказывается есть действительно простая функция mysql_insert_id :-) |
Ситуация 1. вставили запись (Id=1) 2. еще вставили (Id=2) 3. удалили последнюю вставленную запись (в таблице одна запись с ID=1) 4. при попытке вставить следующую запись Auto_increment будет присвоен 3. Если считать от последнего имеющегося в таблице, то следующее значение будет 2. В общем, Вам решать как лучше для Вашего проекта. |
6-vk >пускай будет, мне так и надо |
[em]7-Ar4ik369 >пускай будет, мне так и надо [/em] Не позорься и юзай mysql_insert_id() |
8-CPU >не понял про не позорься, обьясни |
9-Ar4ik369 > mysql_insert_id() возвращает id последнего вставленного элемента, при этом не нужно искать последний и увеличивать его на +1. |
А если в этот момент другой пользователь (или процесс тоже запишет свои данные? получится что у вас будет id на чужую запись... |
[quote=robot bender 0001;24038565] А если в этот момент другой пользователь (или процесс тоже запишет свои данные? получится что у вас будет id на чужую запись... [/quote] это мало вероятно. Все так делают, и все нормально работает. |
12-Искусственный Интеллект1 >Тогда поговорим о вероятности... Если речь идет о малопосещаемой(пару десятков человек в день) странице с комментариями- тогда беспокоиться нечего. А если это какой нибудь банковский сервер с огромной нагрузкой?- один случа Так что если что- то писать, так делать это хорошо. И еще вопрос, кто такие "все"? |
13-robot bender 0001 > mysql_insert_id вернет тебе айди именно вставленного тобой элемента, ни какого нибудь другого а твоего, который ты только что заИнсертил. |
14-Суслик >Уверены? "mysql_insert_id() работает с последним выполненным запросом" |
15-robot bender 0001 > внимательно читай [url]http://www.php.su/functions/?mysql_insert_id[/url] : > mysql_insert_id() возвращает ID, сгенерированный колонкой с AUTO_INCREMENT последним запросом INSERT к серверу, на который ссылается переданный функции указатель link_identifier. Если параметр link_identifier не указан, используется последнее открытое соединение. Если вызывать эту функцию сразу после добавления данных, то все будет правильно работать. [quote=robot bender 0001;24057380] 12-Искусственный Интеллект1 >Тогда поговорим о вероятности... Если речь идет о малопосещаемой(пару десятков человек в день) странице с комментариями- тогда беспокоиться нечего. А если это какой нибудь банковский сервер с огромной нагрузкой?- один случа Так что если что- то писать, так делать это хорошо. И еще вопрос, кто такие "все"? [/quote] Смотрели когда нибудь другие скрипты, сайты? Эта функция давно придумана и используется не один год. И интересно что вы предлагаете? Что значит "делать это хорошо"? |
15-robot bender 0001 > а вы когда с базой работаете - где гарантии что посетитель в личном кабинете не увидит информацию другого человека ? вдруг его запрос выполнился позже А ? |
16-Искусственный Интеллект1 >[quote]Смотрели когда нибудь другие скрипты, сайты? [/quote]- Это я у Вас хотел спросить. [quote]И интересно что вы предлагаете? [/quote]- Про блокировки слышали? |
[quote=robot bender 0001;24058866] - Про блокировки слышали? [/quote] че то слышал, но никогда не использовал. Зачем ее применять? |
Ужас!, здесь кто нибудь читал что нибудь умнее чем "mysql+php для начинавших" ? |
20-robot bender 0001 > так что там с блокировкой? мож ченить внятное написать? |
21-Искусственный Интеллект1 >Пишите, я не против... |
20-robot bender 0001 > не работаю с php, если нужны транзакции используй innoBD в mysql |
16-Искусственный Интеллект1 > Вы когда ссылки даете, до конца дочитывайте написанное по ним. вырезка: Замечание: Значение в SQL функции MySQL LAST_INSERT_ID() всегда содержит последний сгенерированный ID и не обнуляется между запросами. То есть не обязательно вызывать сразу после добавления данных, узнать id последней записи можно в любой момент. 17-Суслик > где гарантии что посетитель в личном кабинете не увидит информацию другого человека ? вдруг его запрос выполнился позже А ? А вы принаджлежность записи определенному пользователю всегда определяете по очереди записи в базу.? Для этого достаточно вставить доп. поле user_id - гарантия ? |
[quote=Kuba;24064924] 16-Искусственный Интеллект1 > Вы когда ссылки даете, до конца дочитывайте написанное по ним. вырезка: Замечание: Значение в SQL функции MySQL LAST_INSERT_ID() всегда содержит последний сгенерированный ID и не обнуляется между запросами. То есть не обязательно вызывать сразу после добавления данных, узнать id последней записи можно в любой момент.[/quote] Вообще-то речь про функцию mysql_insert_id(), а не про LAST_INSERT_ID(). Почитайте по той же ссылке как функция mysql_insert_id() работает. |
24-Kuba > это я утрирую |
Текущее время: 23:22. Часовой пояс GMT +3. |