sql >> Database >  >> RDS >> Mysql

PDO's lastInsertId voor MySQL een raceconditie?

MySQL retourneert de laatste invoeg-ID van een sessie niet naar een andere sessie.

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

Over uw opmerkingen:

Dit is het gedrag van MySQL sinds het begin. Het retourneren van de laatste insert-ID zou vrij nutteloos zijn als deze vatbaar zou zijn voor een race-conditie, dat wil zeggen als inserts in andere sessies je sessie zouden kunnen vervuilen.

Een mogelijkheid is dat je permanente verbindingen gebruikt, omdat oude versies van PHP een bug hadden dat een verbinding kon worden gegeven aan een nieuw PHP-verzoek en toegang kon verlenen tot sessie-scoped status van een eerder PHP-verzoek. Met andere woorden, zaken als vergrendelingen en transacties en tijdelijke tabellen en gebruikersvariabelen en de laatste invoeg-ID kunnen een volgend PHP-verzoek overleven. Deze problemen moeten worden opgelost in PHP 5.3 met de mysqlnd-driver; een blijvende verbinding moet worden "reset" naar een beginstatus.

Een andere mogelijke verklaring is dat het echt goed functioneert, en dat je je vergist in je waarnemingen. Dus ik raad aan om het zorgvuldig en methodisch te testen.

bijwerken: volgens uw antwoord , had dit probleem niets te maken met MySQL of PDO of lastInsertId. Het klinkt alsof je helemaal geen verschillen zag in de uitvoer van je PHP-code, je zag onverwachte cijfers in de netwerkprestatiestatistieken in Chrome Dev Tools.



  1. Dynamische SQL-resultaten in tijdelijke tabel in SQL Stored-procedure

  2. String_agg voor SQL Server vóór 2017

  3. ANDROID&PHP - Hoe JSONArray van MySql weer te geven met behulp van PHP

  4. MySQL - Deze versie van MySQL ondersteunt de subquery 'LIMIT &IN/ALL/ANY/SOME nog niet