К списку форумов К списку тем
Регистрация    Правила    Главная форума    Поиск   
Имя: Пароль:
Рекомендовать в новости

Mysql INSERT как узнать какой ID записался?

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



vk
1 - 06.03.2012 - 20:50
Можно такой запрос
SHOW TABLE STATUS FROM `имя_базы` LIKE 'имя_таблицы'
в результирующем ряду данных будет столбец
"Auto_increment", содержащий значение следующего Auto_increment, которое будет присвоено вставляемой записи.
Гость
2 - 06.03.2012 - 21:01
есть ф-я, выводящая ID последней добавленной записи.
Гость
3 - 06.03.2012 - 21:04
3-Ipro >а по подробнее можно? что это за функция?
Гость
4 - 06.03.2012 - 21:10
3-Ipro >Спасибо за наводку! Оказывается есть действительно простая функция mysql_insert_id :-)
vk
5 - 06.03.2012 - 21:13
Ситуация
1. вставили запись (Id=1)
2. еще вставили (Id=2)
3. удалили последнюю вставленную запись (в таблице одна запись с ID=1)
4. при попытке вставить следующую запись Auto_increment будет присвоен 3. Если считать от последнего имеющегося в таблице, то следующее значение будет 2.

В общем, Вам решать как лучше для Вашего проекта.
Гость
6 - 06.03.2012 - 21:25
6-vk >пускай будет, мне так и надо
Гость
7 - 07.03.2012 - 07:17
7-Ar4ik369 >пускай будет, мне так и надо

Не позорься и юзай mysql_insert_id()
Гость
8 - 12.03.2012 - 11:08
8-CPU >не понял про не позорься, обьясни
Гость
9 - 12.03.2012 - 15:00
9-Ar4ik369 > mysql_insert_id() возвращает id последнего вставленного элемента, при этом не нужно искать последний и увеличивать его на +1.
Гость
10 - 19.03.2012 - 13:37
А если в этот момент другой пользователь (или процесс тоже запишет свои данные? получится что у вас будет id на чужую запись...
11 - 20.03.2012 - 09:02
Цитата:
Сообщение от robot bender 0001 Посмотреть сообщение
А если в этот момент другой пользователь (или процесс тоже запишет свои данные? получится что у вас будет id на чужую запись...
это мало вероятно. Все так делают, и все нормально работает.
Гость
12 - 20.03.2012 - 10:43
12-Искусственный Интеллект1 >Тогда поговорим о вероятности... Если речь идет о малопосещаемой(пару десятков человек в день) странице с комментариями- тогда беспокоиться нечего. А если это какой нибудь банковский сервер с огромной нагрузкой?- один случа
Так что если что- то писать, так делать это хорошо.

И еще вопрос, кто такие "все"?
Гость
13 - 20.03.2012 - 10:50
13-robot bender 0001 > mysql_insert_id вернет тебе айди именно вставленного тобой элемента, ни какого нибудь другого а твоего, который ты только что заИнсертил.
Гость
14 - 20.03.2012 - 10:58
14-Суслик >Уверены? "mysql_insert_id() работает с последним выполненным запросом"
15 - 20.03.2012 - 11:21
15-robot bender 0001 > внимательно читай http://www.php.su/functions/?mysql_insert_id :

> mysql_insert_id() возвращает ID, сгенерированный колонкой с AUTO_INCREMENT последним запросом INSERT к серверу, на который ссылается переданный функции указатель link_identifier. Если параметр link_identifier не указан, используется последнее открытое соединение.

Если вызывать эту функцию сразу после добавления данных, то все будет правильно работать.

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

И интересно что вы предлагаете? Что значит "делать это хорошо"?
Гость
16 - 20.03.2012 - 11:26
15-robot bender 0001 > а вы когда с базой работаете - где гарантии что посетитель в личном кабинете не увидит информацию другого человека ? вдруг его запрос выполнился позже А ?
Гость
17 - 20.03.2012 - 11:30
16-Искусственный Интеллект1 >
Цитата:
Смотрели когда нибудь другие скрипты, сайты?
- Это я у Вас хотел спросить.
Цитата:
И интересно что вы предлагаете?
- Про блокировки слышали?
18 - 20.03.2012 - 11:53
Цитата:
Сообщение от robot bender 0001 Посмотреть сообщение
- Про блокировки слышали?
че то слышал, но никогда не использовал. Зачем ее применять?
Гость
19 - 20.03.2012 - 12:09
Ужас!, здесь кто нибудь читал что нибудь умнее чем "mysql+php для начинавших" ?
20 - 20.03.2012 - 12:40
20-robot bender 0001 > так что там с блокировкой? мож ченить внятное написать?
Гость
21 - 20.03.2012 - 12:42
21-Искусственный Интеллект1 >Пишите, я не против...
Гость
22 - 20.03.2012 - 12:55
20-robot bender 0001 > не работаю с php, если нужны транзакции используй innoBD в mysql
Гость
23 - 20.03.2012 - 14:53
16-Искусственный Интеллект1 > Вы когда ссылки даете, до конца дочитывайте написанное по ним.

вырезка:

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

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

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

А вы принаджлежность записи определенному пользователю всегда определяете по очереди записи в базу.? Для этого достаточно вставить доп. поле user_id - гарантия ?
24 - 20.03.2012 - 15:42
Цитата:
Сообщение от Kuba Посмотреть сообщение
16-Искусственный Интеллект1 > Вы когда ссылки даете, до конца дочитывайте написанное по ним. вырезка: Замечание: Значение в SQL функции MySQL LAST_INSERT_ID() всегда содержит последний сгенерированный ID и не обнуляется между запросами. То есть не обязательно вызывать сразу после добавления данных, узнать id последней записи можно в любой момент.
Вообще-то речь про функцию mysql_insert_id(), а не про LAST_INSERT_ID(). Почитайте по той же ссылке как функция mysql_insert_id() работает.
Гость
25 - 21.03.2012 - 00:22
24-Kuba > это я утрирую


К списку вопросов






Copyright ©, Все права защищены