2012-03-27 10 views
19

Ho il codice seguente:PDO Last Insert ID è sempre quello giusto?

<? 
$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'); 
?> 

Quello che voglio porre è questa. Immagina quando due persone caricano la pagina esattamente nello stesso momento, è possibile che la query di altre persone venga inserita prima che venga recuperato l'ultimo ID, mescolando gli ID?

+11

No, non ci saranno conflitti. L'id dell'inserto dipende dalla connessione e ogni caricamento della pagina stabilirà una nuova connessione. –

+5

Dipende dal database sottostante. Se è mysql, PDO chiamerà semplicemente la funzione API mysql last_insert_id(), che garantisce che l'ID restituito sia l'ID generato dall'ultima query inserita eseguita dalla connessione PDO. –

+1

possibile duplicato di [LAST_INSERT_ID() come funziona nell'ambiente multiutente] (http://stackoverflow.com/questions/5835677/last-insert-id-how-it-works-at-multi-users-environment) –

risposta

24

No, questa situazione è impossibile. Metodo $ db-> lastInsertId() restituisce l'ultimo ID inserito per questo conection DB. In un'altra pagina ci sarà un'altra connessione e un altro ultimo ID inserito.

6

PDO restituirà l'ultimo ID inserito dalla connessione al database attiva corrente.

0

appena affrontato seguente situazione

file di post.php che include un altro file (come insert.php) Avere.

codice intero da inserire in mysql si trova insert.php

In insert.php è codice $id_of_inserted_row = $db->lastInsertId();

Poi nel insert.php è echo $id_of_inserted_row; che mostra il valore corretto.

Ma echo $id_of_inserted_row; in post.php mostra un valore errato (come vedo 7 numeri inferiori al valore effettivo). Non capisco perché, solo bisogno di prendere in considerazione.

Aggiornamento

Siamo spiacenti, al di sopra scritto è stato perché inserita in due tabelle ed erroneamente utilizzato lo stesso $id_of_inserted_row = $db->lastInsertId(); per entrambe le tabelle.

Quindi ho la stessa conclusione di altre risposte: lastInsertId() ottiene l'ID dell'ultima riga inserita.

Situazione fronte. Ho inserito 2 righe in mysql. In tal caso, vedo che lastInsertId() è l'id della prima riga inserita (non l'ultima). Non capisco perché ... risposta Trovato https://stackoverflow.com/a/12574752/2118559

Importante Se si inserisce più righe utilizzando una singola istruzione INSERT, LAST_INSERT_ID() restituisce il valore generato per solo la prima riga inserita. La ragione di ciò è di rendere possibile riprodurre facilmente la stessa istruzione INSERT contro altri server.

Problemi correlati