Mysql
 sql >> Baza danych >  >> RDS >> Mysql

PDO lastInsertId dla MySQL to wyścig?

MySQL nie zwraca ostatniego identyfikatora wstawiania jednej sesji do innej sesji.

http://dev.mysql .com/doc/refman/5.6/en/information-functions.html#function_last-insert-id mówi:

Odpowiedz na swoje komentarze:

Takie było zachowanie MySQL od samego początku. Zwrócenie ostatniego identyfikatora insertu byłoby całkiem bezużyteczne, gdyby było podatne na sytuację wyścigu, to znaczy, gdyby wstawki w innych sesjach mogły zanieczyścić twoją sesję.

Jedną z możliwości jest to, że używasz trwałych połączeń, ponieważ stare wersje PHP miały błąd, że połączenie mogło zostać nadane nowemu żądaniu PHP i przyznać dostęp do stanu o zasięgu sesji z poprzedniego żądania PHP. Innymi słowy, rzeczy takie jak blokady i transakcje, tabele tymczasowe i zmienne użytkownika oraz identyfikator ostatniego wstawienia mogą przetrwać do kolejnego żądania PHP. Te problemy powinny zostać rozwiązane w PHP 5.3 za pomocą sterownika mysqlnd; trwałe połączenie powinno zostać „zresetowane” do stanu początkowego.

Innym możliwym wyjaśnieniem jest to, że naprawdę działa poprawnie i mylisz się w swoich obserwacjach. Proponuję więc przetestować to ostrożnie i metodycznie.

aktualizacja: zgodnie z Twoją odpowiedzią , ten problem nie miał nic wspólnego z MySQL, PDO lub lastInsertId. Wygląda na to, że w ogóle nie widziałeś rozbieżności w wynikach kodu PHP. Widziałeś nieoczekiwane liczby w statystykach wydajności sieci w Narzędziach dla programistów Chrome.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL UPDATE i SELECT w jednym przejściu

  2. Dlaczego niektóre połączenia mysql wybierają stare dane do bazy mysql po usunięciu + wstawieniu?

  3. MySQL:Po co określać szerokość wyświetlania bez używania zerowego wypełnienia?

  4. Skrypt PHP do rejestrowania surowych danych POST

  5. Jak mogę wyświetlić wyniki zapytania MySQL w formacie CSV?