0
- 06.03.2012 - 19:43
|
Добрый день! Хочу сделать простой скрипт php: заполняем данные, добавляются в базу, выводим надпись "инфо добавлено! id записи Х". Где ID идентификатор записи, auto_increment и с добавлением новой записи в базу автоматически повышается на 1. Решил так: сначала считываем какой в базе есть последний ID, добавляем запись, выводим предыдущий ID + 1. Есть ли еще решения? | | ||
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 :-) | | ||
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
| это мало вероятно. Все так делают, и все нормально работает. | | ||
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 не указан, используется последнее открытое соединение. Если вызывать эту функцию сразу после добавления данных, то все будет правильно работать. Цитата:
И интересно что вы предлагаете? Что значит "делать это хорошо"? | | ||
16
- 20.03.2012 - 11:26
| 15-robot bender 0001 > а вы когда с базой работаете - где гарантии что посетитель в личном кабинете не увидит информацию другого человека ? вдруг его запрос выполнился позже А ? | | ||
17
- 20.03.2012 - 11:30
|
16-Искусственный Интеллект1 > Цитата:
Цитата:
| | ||
18
- 20.03.2012 - 11:53
| че то слышал, но никогда не использовал. Зачем ее применять? | | ||
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
| Цитата:
| | ||
25
- 21.03.2012 - 00:22
| 24-Kuba > это я утрирую | |
| Интернет-форум Краснодарского края и Краснодара |