sql >> Base de Datos >  >> RDS >> Mysql

¿El lastInsertId de PDO para MySQL es una condición de carrera?

MySQL no devuelve el último ID de inserción de una sesión a otra sesión.

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

Re sus comentarios:

Este ha sido el comportamiento de MySQL desde el principio. Devolver el ID de la última inserción sería bastante inútil si fuera susceptible a una condición de carrera, es decir, si las inserciones en otras sesiones pudieran contaminar su sesión.

Una posibilidad es que esté utilizando conexiones persistentes, porque las versiones anteriores de PHP tenían un error que permitía otorgar una conexión a una nueva solicitud de PHP y otorgar acceso al estado del ámbito de sesiones de una solicitud de PHP anterior. En otras palabras, cosas como bloqueos y transacciones y tablas temporales y variables de usuario y la última identificación de inserción podrían sobrevivir a una solicitud PHP posterior. Estos problemas deberían resolverse en PHP 5.3 con el controlador mysqlnd; una conexión persistente debe "restablecerse" a un estado inicial.

Otra posible explicación es que realmente está funcionando correctamente y estás equivocado en tus observaciones. Por lo tanto, sugiero probarlo cuidadosa y metódicamente.

actualización: según tu respuesta , este problema no tiene nada que ver con MySQL, PDO o lastInsertId. Parece que no estabas viendo discrepancias en la salida de tu código PHP, estabas viendo números inesperados en las estadísticas de rendimiento de la red en Chrome Dev Tools.