Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Получение ID новой записи

5.1K
27 февраля 2008 года
saturn61
108 / / 25.10.2006
Добрый вечер.

Допустим мы добавляем в базу запись
 
Код:
$query = "INSERT INTO users VALUES(/*бла бла бла*/)";
$result = mysql_query($query);

Нельзя ли получить ID новой записи не используя нового запроса SELECT?
285
27 февраля 2008 года
Romik
479 / / 24.11.2002
last_insert_id($result)
244
28 февраля 2008 года
UAS
2.0K / / 19.07.2006
Только вернет он любой id последний, что неприемлимо для проектов, где id может добавляться несколько раз в секунду..

Т.е. допустим 2 таблицы: users и comments. Добавили запись в users и делаем last_insert_id, но если в этот промежуток была сделана запись в comments (любым другим пользователем), то вернятся именно id из comments
276
28 февраля 2008 года
Rebbit
1.1K / / 01.08.2005
Цитата: UAS
Только вернет он любой id последний, что неприемлимо для проектов, где id может добавляться несколько раз в секунду..


Опа. Не знал. И как теперь жить ? Есть другие средства кроме поискать свою запись в таблице ?

244
28 февраля 2008 года
UAS
2.0K / / 19.07.2006
Обычный SELECT по какому-то условию, ведь обычно есть какие-то ещё условия, кроме одного ID.

Ну или по идее можно так:
1) сделать блокировку таблице на запись
2) заносим данные
3) SELECT MAX(id) FROM table;
4) Снимаем блокировку
8
28 февраля 2008 года
mfender
3.5K / / 15.06.2005
Цитата: Rebbit
Опа. Не знал. И как теперь жить ? Есть другие средства кроме поискать свою запись в таблице ?


Ещё один запрос к конкретной таблице, который вернёт LAST_ID из неё.

5.1K
28 февраля 2008 года
saturn61
108 / / 25.10.2006
Хмм, ну в принципе в моем случае сойдет last_insert_id($result), 2Rebbit спс)
Но вот как всетаки быть если число операций с базой высокое
5.1K
28 февраля 2008 года
saturn61
108 / / 25.10.2006
Цитата:

Ну или по идее можно так:
1) сделать блокировку таблице на запись
2) заносим данные
3) SELECT MAX(id) FROM table;
4) Снимаем блокировку


Ну я так и делаю впринципе)) Просто подумал что как нибудь одним запросом можно обойтись)

1.8K
29 февраля 2008 года
Валериус
190 / / 14.07.2006
Цитата:
Ну или по идее можно так:
1) сделать блокировку таблице на запись
2) заносим данные
3) SELECT MAX(id) FROM table;
4) Снимаем блокировку


Здесь надо не забыть про mysql_errno(), а то очень много пользователей обидится :)

271
29 февраля 2008 года
MrXaK
721 / / 31.12.2002
в mysqli есть $mysqli->insert_id которая должна вернуть то что надо.. тем более что либа при добавлении сама ставит и снимает локи... так что для больших проектов должно возвращаться всё правильно..
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог