Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: mysql dodanie rekordu i natychmiastowe pobranie jego id
Forum PHP.pl > Forum > PHP
pain3hp
jak dodać rekord i odrazu zdobyć jego id, narazie robie to tak ale nie jest to zbyt bezpieczne bo ktoś może w miedzy czasie coś dodać

1.dodaj rekord
2.pobierz id order by id desc limit 1

i tak mam ten id.. jakis inny bezpieczniejszy sposob? Moze da sie jednym zapytaniem...
dzieki
melkorm
mysql_insert_id
pain3hp
z tego co rozumiem to dziala na tej samej zasadzie tylko pewnie jest szybsze w wykonaniu... chodzi mi to że to sa jakby dwa wydarzenia czyli

1.dodaj
2.pobierz

problem w tym ze ktos moze miec szczescie i zdazy dodac zanim ktos inny pobierze i wtedy oboje pobiora to samo i juz jest klapa
thek
To robisz to ale jako procedurę w bazie, która wykonuje ciąg instrukcji, najbezpieczniej jeszcze jeśli jako transakcję. Wtedy masz pewność, że do tego nie dojdzie.
mandragorek
A nie jest przypadkiem tak, że mysql_insert_id() zwraca ten id dla połączenia, które masz otwarte w danym wywołaniu skryptu, więc nawet jeśli w tym samym czasie w drugim wywołaniu też zostanie coś dodane to i tak w pierwszym wywołaniu skryptu dostaniesz id dotyczący ostatniej operacji z tego pierwszego wywołania?
Tak przynajmniej jest napisane w manualu. wink.gif
ADeM
Nie wiem czy dobrze zrozumiałem ~pain3hp, ale wydaje mi się, że chodzi mu o dwa różne żądanie do serwera. Jedno dodaje rekord. W drugim dopiero wyświetla link do pobrania na podstawie dodanego rekordu.
Jeśli chodzi o to, to na stronie dodawania rekordu wrzuć do sesji / ciastka ostatni id ( mysql_insert_id() ), a na drugiej stronie po prostu go odczytaj i na podstawie tego wyświetl odpowiedni link.
ixpack
pdo i SELECT LAST_INSERT_ID() AS zalezy_od_ciebie - wybierze Ci ostatni klucz i nie wazne że ktoś doda coś w trakcie bo tu pobierze id dodany przez danego typka - dla mysql.
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.