pain3hp
8.04.2011, 17:05:35
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
8.04.2011, 17:07:51
pain3hp
8.04.2011, 17:10:40
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
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
8.04.2011, 19:12:19
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.
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
9.04.2011, 18:08:12
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.