Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP][MYSQL] Pobranie wartości ID
xajart
post
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
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 6)
wookieb
post
Post #2





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




To jest profesjonalne rozwiązanie ale oczywiscie jak kto woli
  1. SHOW TABLE STATUS LIKE 'nazwa_tabeli'

I przejrzyj wyniki. Poznasz wartość auto_increment

Ten post edytował wookieb 15.07.2009, 11:28:23


--------------------
Go to the top of the page
+Quote Post
elmozaur
post
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 ;-)
Go to the top of the page
+Quote Post
wookieb
post
Post #4





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




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.


--------------------
Go to the top of the page
+Quote Post
Wicepsik
post
Post #5





Grupa: Zarejestrowani
Postów: 1 575
Pomógł: 299
Dołączył: 26.03.2009

Ostrzeżenie: (20%)
X----


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.


--------------------
Go to the top of the page
+Quote Post
kefirek
post
Post #6





Grupa: Zarejestrowani
Postów: 781
Pomógł: 256
Dołączył: 29.06.2008

Ostrzeżenie: (0%)
-----


A może mysql_insert_id" title="Zobacz w manualu PHP" target="_manual questionmark.gif
Go to the top of the page
+Quote Post
xajart
post
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
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 21.08.2025 - 12:41