X   Сообщение сайта
(Сообщение закроется через 3 секунды)



 

Здравствуйте, гость (

| Вход | Регистрация )

2 страниц V   1 2 >
Открыть тему
Тема закрыта
> Как узнать какой айди я только что добавил в базу?
CandyDandy
CandyDandy
Topic Starter сообщение 23.2.2011, 15:38; Ответить: CandyDandy
Сообщение #1


[PHP]$resultMain = mysql_query ("INSERT INTO product(name,cat,art,track,price,predesc,descr) VALUES ('$productName',
'$catName','$art','$track','$price','$preDesc','$descr')");
if ($resultMain) {echo "Основные параметры записались успешно<br>";}
else {echo "*** Основные параметры не записались! ***<br>";}[/PHP]

Сразу после этого запроса мне нужно записать другие данные в другую таблицу где айди будет равен тому который только что записался.

Мой вопрос в том как можно узнать этот айди?
в базе у поля айди стоит галка auto_increment
уникальные параметры только у поля айди
0
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
alexdrob
alexdrob
сообщение 23.2.2011, 15:44; Ответить: alexdrob
Сообщение #2


http://php.net/manual/en/function.mysql-insert-id.php
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
CandyDandy
CandyDandy
Topic Starter сообщение 23.2.2011, 15:46; Ответить: CandyDandy
Сообщение #3


Вот чем мне нравится php так это тем что в нём есть всё что мне нужно (:
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Mulder_hb
Mulder_hb
сообщение 23.2.2011, 19:22; Ответить: Mulder_hb
Сообщение #4


Фишка может не прокатить на высоконагруженном сайте, когда между запросом на вставку и пхп-функцией mysql_insert_id пройдет некоторое время. Самым надежным вариантом будет сделать после вставки операцию извлечения
SELECT `id` FROM `table` WHERE ...
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
alexdrob
alexdrob
сообщение 23.2.2011, 19:42; Ответить: alexdrob
Сообщение #5


(Mulder_hb @ 23.2.2011, 21:22) *
Самым надежным вариантом будет сделать после вставки операцию извлечения

А если использовать http://www.mysql.ru/docs/man/LOCK_TABLES.html ?
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
DoctorX
DoctorX
сообщение 23.2.2011, 22:10; Ответить: DoctorX
Сообщение #6


Насколько мне известно mysql_insert_id возвращает id для текущей сессии к mysql (если указать аргумент) Так что тут нагрузка не влияет. Или я не прав?


--------------------
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
alexdrob
alexdrob
сообщение 23.2.2011, 22:25; Ответить: alexdrob
Сообщение #7


Наверное прав, так как там есть параметр ид соединения, а значит применяется к текущему соединению.
http://dev.mysql.com/doc/refman/5.0/en/get...-unique-id.html
Тут кстати написанно что изменения автоинкрементного поля другими соединениями не как не влияют на LAST_INSERT_ID() вот отсюда и привязка к соединению.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Mulder_hb
Mulder_hb
сообщение 24.2.2011, 12:04; Ответить: Mulder_hb
Сообщение #8


(alexdrob @ 23.2.2011, 21:42) *
А если использовать http://www.mysql.ru/docs/man/LOCK_TABLES.html ?

Насколько я помню, блокировка таблицы не работает на движке myisam. Да и не знаю, как на остальных кроме, innodb. Поэтому решение не идеальное. Можно конечно, писать костыль, который сможет заблокировать и остальные движки. Хотя с другой стороны, на высоконагруженный сайтах и myisam нет смысла применять.
(Doc.X @ 24.2.2011, 00:10) *
Насколько мне известно mysql_insert_id возвращает id для текущей сессии к mysql (если указать аргумент) Так что тут нагрузка не влияет. Или я не прав?

Из мануала:
Because mysql_insert_id() acts on the last performed query, be sure to call mysql_insert_id() immediately after the query that generates the value.

Пхпшная функция mysql_insert_id() и мускульная функция LAST_INSERT_ID() это разные вещи. У мускула вроде возвращает для текущей сессии, у пхп всегда последний вообще.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Apay
Apay
сообщение 24.2.2011, 12:35; Ответить: Apay
Сообщение #9


(Mulder_hb @ 24.2.2011, 14:04) *
у пхп всегда последний вообще
именно для этого есть параметр, т.к. у php возвращает именно последний для заданного соединения. поэтому ни блокировка таблиц, ни тем более запрос с where не нужны.
достаточно простого
[PHP]$id = mysql_insert_id($connection);[/PHP]
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Mulder_hb
Mulder_hb
сообщение 24.2.2011, 17:49; Ответить: Mulder_hb
Сообщение #10


(Apay @ 24.2.2011, 14:35) *
именно для этого есть параметр

На простеньких сайтах даже и параметр передавать не нужно. Все прекрасно и без него работает. Параметр служит лишь для разграничения нескольких соединений внутри текущей сессии. Он не разграничивает сессии в параллельных процессах. Вероятность получить тот же идентификатор очень мала, но на высоконагруженных сайтах вполне реальна. Поэтому и используются такие понятия, как блокировка таблиц, блокировка файлов. Читайте внимательнее мануал.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
2 страниц V   1 2 >
Открыть тему
Тема закрыта
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


Свернуть

> Похожие темы

  Тема Ответов Автор Просмотров Последний ответ
Открытая тема (нет новых ответов) Как в пушсетках покупают по 100-200 тысяч кликов за день?
2 Boymaster 701 Вчера, 17:52
автор: Boymaster
Горячая тема (нет новых ответов) Как вы отдыхаете от работы за компом
151 adw-kupon.ru 19866 23.4.2024, 13:52
автор: Vmir
Открытая тема (нет новых ответов) Какой % отказов нормален для сайта?
14 Aloof 3384 23.4.2024, 13:50
автор: Vmir
Открытая тема (нет новых ответов) Как вы бросили работу и перешли на заработок с сайтов?
20 uahomka 3478 23.4.2024, 11:54
автор: Skyworker
Горячая тема (нет новых ответов) Тема имеет прикрепленные файлыВо что Вы играете?
400 Vmir 67988 20.4.2024, 18:39
автор: SaintExchange


 



RSS Текстовая версия Сейчас: 25.4.2024, 16:46
Дизайн