Mysql
 sql >> Base de données >  >> RDS >> Mysql

Le lastInsertId de PDO pour MySQL est-il une condition de concurrence ?

MySQL ne renvoie pas le dernier identifiant d'insertion d'une session à une autre session.

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

Vos commentaires :

C'est le comportement de MySQL depuis le début. Renvoyez le dernier ID d'insertion serait assez inutile s'il était sensible à une condition de concurrence, c'est-à-dire si des insertions dans d'autres sessions pouvaient polluer votre session.

Une possibilité est que vous utilisiez des connexions persistantes, car les anciennes versions de PHP comportaient un bogue selon lequel une connexion pouvait être accordée à une nouvelle requête PHP et accorder l'accès à l'état de la portée des sessions à partir d'une requête PHP précédente. En d'autres termes, des éléments tels que les verrous, les transactions, les tables temporaires, les variables utilisateur et le dernier identifiant d'insertion pourraient survivre à une requête PHP ultérieure. Ces problèmes devraient être résolus en PHP 5.3 avec le pilote mysqlnd; une connexion persistante doit être "réinitialisée" à un état initial.

Une autre explication possible est qu'il fonctionne vraiment correctement et que vous vous trompez dans vos observations. Je vous suggère donc de le tester soigneusement et méthodiquement.

mise à jour : selon votre réponse , ce problème n'avait rien à voir avec MySQL, PDO ou lastInsertId. Il semble que vous ne voyiez aucune différence dans la sortie de votre code PHP, vous voyiez des chiffres inattendus dans les statistiques de performances du réseau dans Chrome Dev Tools.