Форум на Kuban.ru (http://forums.kuban.ru/)
-   Веб-дизайн и программирование (http://forums.kuban.ru/f1030/)
-   -   Mysql INSERT как узнать какой ID записался? (http://forums.kuban.ru/f1030/mysql_insert_kak_uznat-_kakoj_id_zapisalsya-2301886.html)

Ar4ik369 06.03.2012 19:43

Mysql INSERT как узнать какой ID записался?
 
Добрый день! Хочу сделать простой скрипт php:
заполняем данные, добавляются в базу, выводим надпись "инфо добавлено! id записи Х". Где ID идентификатор записи, auto_increment и с добавлением новой записи в базу автоматически повышается на 1.
Решил так: сначала считываем какой в базе есть последний ID, добавляем запись, выводим предыдущий ID + 1. Есть ли еще решения?

vk 06.03.2012 20:50

Можно такой запрос
SHOW TABLE STATUS FROM `имя_базы` LIKE 'имя_таблицы'
в результирующем ряду данных будет столбец
"Auto_increment", содержащий значение следующего Auto_increment, которое будет присвоено вставляемой записи.

Ipro 06.03.2012 21:01

есть ф-я, выводящая ID последней добавленной записи.

Ar4ik369 06.03.2012 21:04

3-Ipro >а по подробнее можно? что это за функция?

Ar4ik369 06.03.2012 21:10

3-Ipro >Спасибо за наводку! Оказывается есть действительно простая функция mysql_insert_id :-)

vk 06.03.2012 21:13

Ситуация
1. вставили запись (Id=1)
2. еще вставили (Id=2)
3. удалили последнюю вставленную запись (в таблице одна запись с ID=1)
4. при попытке вставить следующую запись Auto_increment будет присвоен 3. Если считать от последнего имеющегося в таблице, то следующее значение будет 2.

В общем, Вам решать как лучше для Вашего проекта.

Ar4ik369 06.03.2012 21:25

6-vk >пускай будет, мне так и надо

CPU 07.03.2012 07:17

[em]7-Ar4ik369 >пускай будет, мне так и надо [/em]

Не позорься и юзай mysql_insert_id()

Ar4ik369 12.03.2012 11:08

8-CPU >не понял про не позорься, обьясни

Kuba 12.03.2012 15:00

9-Ar4ik369 > mysql_insert_id() возвращает id последнего вставленного элемента, при этом не нужно искать последний и увеличивать его на +1.

robot bender 0001 19.03.2012 13:37

А если в этот момент другой пользователь (или процесс тоже запишет свои данные? получится что у вас будет id на чужую запись...

Искусственный Интеллект1 20.03.2012 09:02

[quote=robot bender 0001;24038565] А если в этот момент другой пользователь (или процесс тоже запишет свои данные? получится что у вас будет id на чужую запись... [/quote]
это мало вероятно. Все так делают, и все нормально работает.

robot bender 0001 20.03.2012 10:43

12-Искусственный Интеллект1 >Тогда поговорим о вероятности... Если речь идет о малопосещаемой(пару десятков человек в день) странице с комментариями- тогда беспокоиться нечего. А если это какой нибудь банковский сервер с огромной нагрузкой?- один случа
Так что если что- то писать, так делать это хорошо.

И еще вопрос, кто такие "все"?

суслик 20.03.2012 10:50

13-robot bender 0001 > mysql_insert_id вернет тебе айди именно вставленного тобой элемента, ни какого нибудь другого а твоего, который ты только что заИнсертил.

robot bender 0001 20.03.2012 10:58

14-Суслик >Уверены? "mysql_insert_id() работает с последним выполненным запросом"

Искусственный Интеллект1 20.03.2012 11:21

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]

Смотрели когда нибудь другие скрипты, сайты? Эта функция давно придумана и используется не один год.

И интересно что вы предлагаете? Что значит "делать это хорошо"?

суслик 20.03.2012 11:26

15-robot bender 0001 > а вы когда с базой работаете - где гарантии что посетитель в личном кабинете не увидит информацию другого человека ? вдруг его запрос выполнился позже А ?

robot bender 0001 20.03.2012 11:30

16-Искусственный Интеллект1 >[quote]Смотрели когда нибудь другие скрипты, сайты? [/quote]- Это я у Вас хотел спросить.
[quote]И интересно что вы предлагаете? [/quote]- Про блокировки слышали?

Искусственный Интеллект1 20.03.2012 11:53

[quote=robot bender 0001;24058866] - Про блокировки слышали? [/quote]
че то слышал, но никогда не использовал. Зачем ее применять?

robot bender 0001 20.03.2012 12:09

Ужас!, здесь кто нибудь читал что нибудь умнее чем "mysql+php для начинавших" ?

Искусственный Интеллект1 20.03.2012 12:40

20-robot bender 0001 > так что там с блокировкой? мож ченить внятное написать?

robot bender 0001 20.03.2012 12:42

21-Искусственный Интеллект1 >Пишите, я не против...

суслик 20.03.2012 12:55

20-robot bender 0001 > не работаю с php, если нужны транзакции используй innoBD в mysql

Kuba 20.03.2012 14:53

16-Искусственный Интеллект1 > Вы когда ссылки даете, до конца дочитывайте написанное по ним.

вырезка:

Замечание: Значение в SQL функции MySQL LAST_INSERT_ID() всегда содержит последний сгенерированный ID и не обнуляется между запросами.

То есть не обязательно вызывать сразу после добавления данных, узнать id последней записи можно в любой момент.

17-Суслик > где гарантии что посетитель в личном кабинете не увидит информацию другого человека ? вдруг его запрос выполнился позже А ?

А вы принаджлежность записи определенному пользователю всегда определяете по очереди записи в базу.? Для этого достаточно вставить доп. поле user_id - гарантия ?

Искусственный Интеллект1 20.03.2012 15:42

[quote=Kuba;24064924] 16-Искусственный Интеллект1 > Вы когда ссылки даете, до конца дочитывайте написанное по ним. вырезка: Замечание: Значение в SQL функции MySQL LAST_INSERT_ID() всегда содержит последний сгенерированный ID и не обнуляется между запросами. То есть не обязательно вызывать сразу после добавления данных, узнать id последней записи можно в любой момент.[/quote]

Вообще-то речь про функцию mysql_insert_id(), а не про LAST_INSERT_ID(). Почитайте по той же ссылке как функция mysql_insert_id() работает.

суслик 21.03.2012 00:22

24-Kuba > это я утрирую


Текущее время: 23:22. Часовой пояс GMT +3.