Получение ID новой записи
Допустим мы добавляем в базу запись
Код:
$query = "INSERT INTO users VALUES(/*бла бла бла*/)";
$result = mysql_query($query);
$result = mysql_query($query);
Нельзя ли получить ID новой записи не используя нового запроса SELECT?
Т.е. допустим 2 таблицы: users и comments. Добавили запись в users и делаем last_insert_id, но если в этот промежуток была сделана запись в comments (любым другим пользователем), то вернятся именно id из comments
Цитата: UAS
Только вернет он любой id последний, что неприемлимо для проектов, где id может добавляться несколько раз в секунду..
Опа. Не знал. И как теперь жить ? Есть другие средства кроме поискать свою запись в таблице ?
Ну или по идее можно так:
1) сделать блокировку таблице на запись
2) заносим данные
3) SELECT MAX(id) FROM table;
4) Снимаем блокировку
Цитата: Rebbit
Опа. Не знал. И как теперь жить ? Есть другие средства кроме поискать свою запись в таблице ?
Ещё один запрос к конкретной таблице, который вернёт LAST_ID из неё.
Но вот как всетаки быть если число операций с базой высокое
Цитата:
Ну или по идее можно так:
1) сделать блокировку таблице на запись
2) заносим данные
3) SELECT MAX(id) FROM table;
4) Снимаем блокировку
Ну я так и делаю впринципе)) Просто подумал что как нибудь одним запросом можно обойтись)
Цитата:
Ну или по идее можно так:
1) сделать блокировку таблице на запись
2) заносим данные
3) SELECT MAX(id) FROM table;
4) Снимаем блокировку
1) сделать блокировку таблице на запись
2) заносим данные
3) SELECT MAX(id) FROM table;
4) Снимаем блокировку
Здесь надо не забыть про mysql_errno(), а то очень много пользователей обидится :)
в mysqli есть $mysqli->insert_id которая должна вернуть то что надо.. тем более что либа при добавлении сама ставит и снимает локи... так что для больших проектов должно возвращаться всё правильно..