2012-03-27 20 views
19

Tengo el siguiente código:PDO ¿La última identificación insertada siempre es la correcta?

<? 
$query =$db->prepare("INSERT INTO a_table (id, a_field) VALUES ('', (:a_field)"); 
$query->bindParam(":a_field", $a_value); 
$query->execute(); 
$last_id = $db->lastInsertId('a_table'); 
?> 

Lo que quiero hacer es ésta. Imagine que dos personas cargan la página exactamente al mismo tiempo, ¿existe un posible peligro de que la consulta de otras personas se inserte antes de que se recupere la última identificación, mezclando las ID?

+11

No, no habrá conflicto. La id de inserción depende de la conexión, y cada carga de página establecerá una nueva conexión. –

+5

Depende de la base de datos subyacente. Si es mysql, PDO simplemente llamará a la función API mysql last_insert_id(), que garantiza que el ID devuelto es el ID generado por la última consulta de inserción realizada por su conexión PDO. –

+1

posible duplicado de [LAST_INSERT_ID() cómo funciona en el entorno de usuarios múltiples] (http://stackoverflow.com/questions/5835677/last-insert-id-how-it-works-at-multi-users-environment) –

Respuesta

24

No, esta situación es imposible. Método $ db-> lastInsertId() devuelve el último ID insertado para esta conexión DB. En otra página habrá otra conexión y otra última identificación insertada.

6

PDO le devolverá el último ID insertado por la conexión actual de la base de datos activa.

0

Sólo enfrentado siguiente situación

tiene el archivo post.php que incluye otro archivo (como insert.php).

código entero para insertar en MySQL se encuentra en insert.php

En insert.php es código $id_of_inserted_row = $db->lastInsertId();

Luego, en insert.php es echo $id_of_inserted_row; que muestra valor correcto.

Pero echo $id_of_inserted_row; en post.php muestra un valor incorrecto (como veo, muestra 7 números menos que el valor real). No entiendo por qué, solo necesito tomar en cuenta.

actualización

Lo sentimos, escrito anteriormente fue porque se inserta en dos mesas y por error se utiliza la misma $id_of_inserted_row = $db->lastInsertId(); para ambas tablas.

Así que tengo la misma conclusión que en otras respuestas: lastInsertId() obtiene la identificación de la última fila insertada.

Situación enfrentada. Inserté 2 filas en mysql. En tal caso, veo que lastInsertId() es id de la primera fila insertada (no la última). No entiendo por qué ... respuesta Encontrado https://stackoverflow.com/a/12574752/2118559

Importante Si inserta varias filas utilizando una única instrucción INSERT, LAST_INSERT_ID() devuelve el valor generado por sólo la primera fila insertada. La razón para esto es permitir reproducir fácilmente la misma instrucción INSERT contra otro servidor.

Cuestiones relacionadas