AngelEyes napisał(a)
Ok, ale program jest wieloużytkownikowy i działa na kilku stanowiskach. Jaką mam pewność że last_insert_id() da mi ID rekordu dodanego przeze mnie a nie rekordu dodanego przez panią Jadzię z siódmego piętra. Jej rekord może wskoczyć gdzieś pomiędzy moje zapytania i zrobi się bałagan.
Pewnie - lepiej pytać zamiast wziąć i wpisać (ba, przekleić, a jak masz operę to kliknąć dwa razy i wybrać szukaj) w google i przeczytać
MySQL Manual napisał(a)
For LAST_INSERT_ID(), the most recently generated ID is maintained in the server on a per-connection basis. It is not changed by another client. It is not even changed if you update another AUTO_INCREMENT column with a nonmagic value (that is, a value that is not NULL and not 0). Using LAST_INSERT_ID() and AUTO_INCREMENT columns simultaneously from multiple clients is perfectly valid. Each client will receive the last inserted ID for the last statement that client executed.
maciejmt napisał(a)
Ja kiedys probowalem sterowac last_insert_id(), (np z tabeli X), ale to nie skutkowało poprawnie.
A skąd pewność, że to wina bazy a nie Twoja?
Wiec raczej jedynym wyjsciem bedzie wyselektowanie tego, co zainsertowales :-)
i to jest najgorsze rozwiązanie
jawor1104 napisał(a)
A może spróbuj pobrać ID z tej pierwszej tabeli na podstawie tego co dodajesz do niej, np.
SELECT id FROM tabela1 where wartosc_pola1=to_co_przed_chwila_dodales_do_pola_pierwszego
Pewnie, szczególnie jak tych wstawianych wartości jest ze 30. Z drugiej strony po co optymalizować programy - za wolno działa, zmieńmy sprzęt!!
albo jak masz użytkowników w bazie to jak pisał maciejmt:
last_insert_id()
użytkownicy nie mają tu nic do rzeczy. Możesz mieć jednego usera a to i tak będzie działać - dlaczego, masz napisane powyżej
tylko dodaj do tego jeszcze użytkownika, który to dodał (tego nie testowałem, więc nie wiem czy działa?).
tylko jestem ciekaw gdzie i jak tego usera miałby dodać :>