method last inserted example after mysql database pdo

inserted - MySQL y PDO: ¿Podría PDO:: lastInsertId teóricamente fallar?



php pdo get last id insert (2)

He estado reflexionando sobre esto por un tiempo.

Considere una aplicación web de enormes proporciones, donde, digamos, millones de consultas SQL se realizan cada segundo.

Ejecuto mi código:

$q = $db->prepare(''INSERT INTO Table (First,Second,Third,Fourth) VALUES (?,?,?,?)''); $q->execute(array($first,$second,$third,$fourth));

Luego, inmediatamente después, quiero buscar el ID autoincrementado de esta última consulta:

$id = $db->lastInsertId();

¿Es posible que lastInsertId falle, es decir, busque el ID de alguna consulta de inserción SQL que se ejecutó entre mis dos bloques de código?

Secundario:

Si puede fallar, ¿cuál sería la mejor manera de tapar esta posible fuga?

¿Sería más seguro crear otra consulta SQL para obtener el ID correcto de la base de datos, solo para estar seguro?


Siempre será seguro siempre que la implementación de PDO no esté haciendo algo realmente desquiciado. Lo siguiente es de la información de MySQL en last_insert_id :

La ID que se generó se mantiene en el servidor por conexión. Esto significa que el valor devuelto por la función a un cliente dado es el primer valor de AUTO_INCREMENT generado para la declaración más reciente que afecta a una columna AUTO_INCREMENT por ese cliente. Este valor no puede verse afectado por otros clientes, incluso si generan sus propios valores AUTO_INCREMENT. Este comportamiento garantiza que cada cliente pueda recuperar su propia ID sin preocuparse por la actividad de otros clientes, y sin la necesidad de bloqueos o transacciones.


No. lastInsertId es por conexión y no requiere una solicitud al servidor: mysql siempre lo envía de vuelta en su paquete de respuesta.

Entonces, si el método de ejecución no arroja una excepción, entonces se garantiza que tendrá el valor correcto en lastInsertId.

Nunca le dará el ID de inserción de otra cosa, a menos que su consulta falle por alguna razón (por ejemplo, sintaxis inválida) en cuyo caso podría darle el ID de inserción del anterior en la misma conexión. Pero no de nadie más.