Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> MySQL LAST_INSERT_ID(), Pytanie co do pobierania id rekordu
ksenonlogin
post
Post #1





Grupa: Zarejestrowani
Postów: 123
Pomógł: 3
Dołączył: 29.10.2011

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


Witam

Od jakiegoś czasu nurtuje mnie pewna sprawa z funkcją mysql_insert_id(). Czy gdy pobieram id nowo wstawionego prze zemnie rekordu, to mam pewność że jest to id tego rekordu?

Może dokładnie na takiej sytuacji:

Załóżmy że użytkownik "A" wstawia nowy rekord do tabeli (niech będzie że auto_increment nadał rekordowi id: "2") i pobiera id tego rekordu za pomocą funkcji: mysql_insert_id(), funkcja ta zwraca wtedy id rekordu: "2",
a w tym samym czasie wykonuje tą samą czynność użytkownik "B" który wstawił rekord (z nadanym id: "3"), a więc chodzi mi o to:

Czy dane sytuacja może się skrzyżować?, w momencie gdy użytkownik "A" wstawia rekord, a potem pobiera numer id powstaje jakaś luka czasowa między tymi czynnościami, i gdy użytkownik "B" wstawi rekord w tym czasie (w czasie tej przerwy między wstawieniem a pobraniem id), to użytkownik "A" otrzyma id swojego rekordu czy id rekordu innego użytkownika (użytkownika "B")?

Jeżeli taka sytuacja może się zdarzyć to proszę o podanie sposobu który pozwoli tego uniknąć.



Pozdrawiam
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
croc
post
Post #2





Grupa: Zarejestrowani
Postów: 706
Pomógł: 108
Dołączył: 12.03.2010

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


Ciekawe pytanie. Wydaje mi się, choć nie wiem tego na pewno, że funkcja mysql_insert_id zwraca zawsze ostatni ID wstawiony przez Ciebie. Dlatego, że jako parametr opcjonalny przyjmuje identyfikator połączenia, a gdy go nie dostaje, analizuje po prostu ostatnie połączenie. Operacje na danych są powiązane z konkretnymi połączeniami, więc moim zdaniem możesz śmiało używać tej funkcji.
Go to the top of the page
+Quote Post
ksenonlogin
post
Post #3





Grupa: Zarejestrowani
Postów: 123
Pomógł: 3
Dołączył: 29.10.2011

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


Cytat(croc @ 29.10.2011, 14:03:18 ) *
Ciekawe pytanie. Wydaje mi się, choć nie wiem tego na pewno, że funkcja mysql_insert_id zwraca zawsze ostatni ID wstawiony przez Ciebie. Dlatego, że jako parametr opcjonalny przyjmuje identyfikator połączenia, a gdy go nie dostaje, analizuje po prostu ostatnie połączenie. Operacje na danych są powiązane z konkretnymi połączeniami, więc moim zdaniem możesz śmiało używać tej funkcji.



Załóżmy że jakimś cudem identyfikator połączenia zostanie zagubiony (mój identyfikator), bądź przez jakiś błąd tego identyfikatora nie dostanie to będzie analizowane połączenie ostatnie i pobierze błędny klucz rekordu wstawionego prze ze mnie tak?

niżej:

gdy za pierwszym razem wszystko sie uda a za drugim nie to poda id z pierwszego razu tak?

<?php
mysql_connect('localhost', 'uzytkownik', 'haslo') or
die('Nie można się połączyć');
mysql_select_db('baza');

mysql_query("INSERT INTO mytable (uzytkownik) values ('ksenonlogin1')");
printf ("Ostatnio dodany rekord ma id %d\n", mysql_insert_id());


mysql_query("INSERT INTO mytable (uzytkownik) values ('ksenonlogin2')");
printf ("Ostatnio dodany rekord ma id %d\n", mysql_insert_id());


?>

Ten post edytował ksenonlogin 29.10.2011, 14:30:38
Go to the top of the page
+Quote Post

Posty w temacie


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

 



RSS Aktualny czas: 7.10.2025 - 14:14