Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Id ostatnio dodanego rekordu
Forum PHP.pl > Forum > Bazy danych > MySQL
xamil
Temat wydaje sie banalny i pewnie mam po prostu jakieś zacmienie umysłu ale co gorsze uszukałem się na forum i nie moge znaleść:(

Mamy dwie tabele. Powiedzmy (dane i tabelki sobie wymyśliłem), że mam tabelke 'skrzynki' i tabelke 'towary'.

W tabelce skrzynki powiedzmy, że będzie id | kolor | wielkosc
W tabelce towary bedzie id | id_skrzynki | nazwa | cena

I teraz chce przy pomocy php dodać do bazy skrzynke i odrazu do niej jakies towary. Zapytania będę wyglądać tak:
  1. INSERT
  2. INTO skrzynki
  3. SET kolor='red', wielkosc='20';

Później
  1. INSERT
  2. INTO towary
  3. SET nazwa='jablko', cena='1', id_skrzynki='skad wziac id_skrzynki?';

No i właśnie skąd wziąć id ostatnio dodanej przeze mnie skrzynki?
Najlepiej bez podzapytań.
SebastianSerafin
Witam
Krótko i na temat:

$id_skrzynki = mysql_insert_id" title="Zobacz w manualu php" target="_manual();

i wszystko jasne
Pozdrawiam
xamil
Dziękuje pięknie i pozdrawiam.
mhs
lub z poziomu SQL:

  1. SELECT LAST_INSERT_ID();
xamil
To jeszcze dla pewności pytanie techniczne do obu wersji.
Jak to z tym jest gdy w tym samym czasie dwie osoby wykonają zapytanie jak w przykładzie ze skrzynkami. Czyli dodadzą do tabelki skrzynka jeden rekord i później do drugiej tabelki towary z id_skrzynki.

Czyli czy moze sie zdażyć tak, że user 1 doda do bazy swoją skrzynke, później do bazy zostanie dodana skrzynka user'a 2. I teraz user 1 pobiera last_id i dostaje id skrzynki ale skrzynki user'a 2 przez co wiadomo, ze doda towary nie do tej skrzynki:/.

Przypuszczam, że taka sytuacja jest wykluczona bo pewnie baza jest zajęta przez użytkownika aż do jej zwolnienia czy cos w tym stylu ale nie potwierdzona niepewnosc nie daje mi spokoju;)

Z góry dzieki za wszelkie wyjaśnienia.
mhs
Możesz o to być spokojny. Niezależnie od metody (tą co ja podałem, czy też tą wcześniejszą) zwrócene ID zostanie prawidłowe, a to ze względu na to, że zwracane jest ID w obrębie Twojej sesji. Najlepiej możesz sobie to sprawdzić uruchamiając dwie konsole mysqlowe i dodanie do tej samej tabeli danych wg. schematu, który Ty opisujesz. Zawsze w ramach danej sesji dostaniesz ID ostatnio dodane (mimo iż wcześniej ktoś mógł dodać nowy rekord do tej samej tabeli).
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.