![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 141 Pomógł: 1 Dołączył: 2.12.2008 Ostrzeżenie: (0%) ![]() ![]() |
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. Ten post edytował erix 15.07.2009, 11:45:25
Powód edycji: [erix] MSSQL != MySQL
|
|
|
![]()
Post
#2
|
|
Grupa: Moderatorzy Postów: 8 989 Pomógł: 1550 Dołączył: 8.08.2008 Skąd: Słupsk/Gdańsk ![]() |
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 518 Pomógł: 18 Dołączył: 21.07.2008 Ostrzeżenie: (0%) ![]() ![]() |
albo mozna dac pytanie o max(id)
potem tylko zwiekszyc o jeden ;-) |
|
|
![]()
Post
#4
|
|
Grupa: Moderatorzy Postów: 8 989 Pomógł: 1550 Dołączył: 8.08.2008 Skąd: Słupsk/Gdańsk ![]() |
|
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 1 575 Pomógł: 299 Dołączył: 26.03.2009 Ostrzeżenie: (20%) ![]() ![]() |
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.
|
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 781 Pomógł: 256 Dołączył: 29.06.2008 Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 141 Pomógł: 1 Dołączył: 2.12.2008 Ostrzeżenie: (0%) ![]() ![]() |
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ść. Ten post edytował xajart 15.07.2009, 12:35:28 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 23.08.2025 - 18:41 |