Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MYSQL] Pobranie wartości ID
Forum PHP.pl > Forum > Przedszkole
xajart
Witam.

Czy można w jakiś sposób pobrać wartość ID jaką MySQL nadaje nowo dodanemu rekordowi. Jeżeli wartość ID jest typu autoincrement, to SQL kiedy dostaje komunikat w formie:

Kod
INSERT INTO $tab VALUES ('', '$name')


Przy tabeli formatu:
ID | name

przypisze nowo dodawanemu wartość ID kolejną. 

I chodzi mi o to czy można w jakiś sposób odczytać z MySQL jaka ta wartość kolejna jest?

Bo obecnie to rozwiązywałem to w taki sposób że najpierw dodawałem rekord, a potem odczytywałem z bazy danych jakie ID zostało mu nadane by wykonać kolejne operacje. Jednak ten sposób moim zdaniem nie jest profesjonalnym rozwiazaniem i czy można wcześniej odczytać jaka ta wartość będzie ?

Potrzebne jest mi to do zrealizowania formularza, w którym użytkownik w kilku krokach może dodawać kolejne opcje, z tym że po wykonaniu pierwszego kroku muszę znać wartość ID by można było wykonać kolejne operacje.
wookieb
To jest profesjonalne rozwiązanie ale oczywiscie jak kto woli
  1. SHOW TABLE STATUS LIKE 'nazwa_tabeli'

I przejrzyj wyniki. Poznasz wartość auto_increment
elmozaur
albo mozna dac pytanie o max(id)
potem tylko zwiekszyc o jeden ;-)
wookieb
Cytat(elmozaur @ 15.07.2009, 12:56:53 ) *
albo mozna dac pytanie o max(id)
potem tylko zwiekszyc o jeden ;-)


To nie jest prawidłowe rozwiązanie. Dodaj 5 rekordów a potem je usuń i zobacz jaki id następnego rekordu dostaniesz.
Wicepsik
A nie lepiej użyć sesji ? Dane zostają w bazie nawet gdy osoba nie wypełni całego formularza. A z sesjami dopiero na ostatnim kroku możesz wkładać dane do bazy. I możesz sprawdzać czy osoba wypełniła np. krok pierwszy w kroku drugim, jeśli nie to wyświetlasz komunikat o tym.
xajart
Dokładnie z tym max(id) to jest kiepskie rozwiązanie, ale jak ktoś sobie tak rozplanuje to potem musi bardzo skrupulatnie pilnować kodu, by mieć gwarancję że pobierane/nadawane ID jest właściwym. 

A co powiecie o

Kod
mysql_insert_id()


Zwraca wartość ostatnio dodanego ID, tylko z tego co wnioskuje to kiedy dojdzie do sytuacji że inny użytkownik parę milisekund po dodanej przez nas wartośći doda inną wówczas zwróci nie ten co trzeba ID.

Z tego co przeglądam manuala to można też wywołać zapytanie do bazy danych o treści

Kod
SELECT LAST_INSERT_ID() FROM $table


Ale w tym przypadku może zaistnieć sytuacja jak powyżej, choć prawdopodobieństwo jest już mniejsze, bo sprecyzowane do konkretnej tabeli. Ale z tego co wnioskuję podobnie będzie z

Kod
SHOW TABLE STATUS LIKE $table
.

Chyba jednak najlepszą metodą okazuje się dodanie najpierw wartości do bazy danych (w kroku 1) a w kolejnym odczytanie ID na podstawie kilku wybranych wartośći (które zostały dodane), wtedy ma się 100% gwarancję że uzyskany ID jest tym który został nadany we wcześniejszej operacji.

W sumie to niepotrzebnie ten temat zakładałem. Bo w sumie chciałem zminimalizować opcje zapytań do bazy danych ale w każdym przypadku wychodzi że i tak to zapytanie musi zostać zadane.

Cytat("Wicepsik")
Sesje
.

O to jakoś przeoczyłem - dzięki za naprowadzenie, chyba bedzie to najlepsza metoda. Jednak kolejny problem mi się pojawia przy tym że w trakcie kiedy użytkownik przechodzi przez kolejne zapytania trafia na zapytanie utworzenia Albumu i w tym przypadku albumy dla unikalności są tworzone wg nazwy ID, więc tutaj będę musiał albo wygenerować jakąś liczbe losową np której zostanie utworzony album (i w bazie danych zapisać pod jaką nazwą widnieje ten album), albo wrócić do poprzedniej metody z pobieraniem ID. Musze ponownie rozważyc jak identyfikować albumy by zachować unikalność.
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.