sql >> Databasteknik >  >> RDS >> Mysql

PDO:s lastInsertId för MySQL ett rasvillkor?

MySQL returnerar inte en sessions senaste infognings-id till en annan session.

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

Angående dina kommentarer:

Detta har varit beteendet hos MySQL sedan början. Att returnera det senaste infognings-ID:t skulle vara ganska värdelöst om det var mottagligt för ett tävlingsförhållande, det vill säga om inlägg i andra sessioner skulle kunna förorena din session.

En möjlighet är att du använder beständiga anslutningar, eftersom gamla versioner av PHP hade en bugg att en anslutning kunde ges till en ny PHP-förfrågan och ge åtkomst till sessionsomfattande tillstånd från en tidigare PHP-förfrågan. Med andra ord, saker som lås och transaktioner och temporära tabeller och användarvariabler och last insert id kan överleva till en efterföljande PHP-förfrågan. Dessa problem bör lösas i PHP 5.3 med mysqlnd-drivrutinen; en beständig anslutning bör "återställas" till ett initialt tillstånd.

En annan möjlig förklaring är att det verkligen fungerar korrekt, och du har fel i dina observationer. Så jag skulle föreslå att du testar det noggrant och metodiskt.

uppdatering: enligt ditt svar , detta problem hade ingenting att göra med MySQL eller PDO eller lastInsertId. Det låter som att du inte såg några avvikelser i utdata från din PHP-kod alls, du såg oväntade siffror i statistik över nätverksprestanda i Chrome Dev Tools.



  1. Hur man skapar en sammansatt primär nyckel i MySQL

  2. Hur testar man om en MySQL-fråga lyckades ändra databastabelldata?

  3. Oracle REPLACE()-funktionen hanterar inte vagnreturer och radmatningar

  4. Hur man ändrar webbporten i EBS 12.2