2013-10-23 4 views
5

Ho programmato 3 ~ 4 anni fa, e ricordo che in alcuni documenti di sicurezza del 2005 php sulla sicurezza dell'utilizzo di mysql_insert_id per recuperare l'ultimo_inser_id.La funzione insert_id() di Codeigniter recupera correttamente l'ultimo ID di inserimento?

Nel libro si dice che se ci sono diverse richieste al server allo stesso tempo (migliaia), potrebbe rendere errato il recupero di last_insert_id, terminando con l'id dell'utente che punta ad altri utenti.

Ora siamo nel 2013, quello che voi ragazzi dovete dire su questo, e specialmente usando codeigniter insert_id().

pd: Ho cercato di trovare informazioni rilevanti sulla mia domanda in altri posti ma non ho trovato nulla di concreto.

risposta

7

Chiunque abbia scritto quel libro è pieno di schifezze. LAST_INSERT_ID() è specifico per la connessione e la connessione è specifica per il richiamo corrente dello script. Non riesco a pensare a un modo per rompere questo senza riscrivere un codice sorgente PHP dopo una notte di forti bevute.

Forse se si sta utilizzando connessioni persistenti, e poi se l'ultimo collegamento ha fatto un inserto, e poi hai chiamato LAST_INSERT_ID() prima di fare un successo inserire voi stessi [di controllare i valori di ritorno, giusto?], quindi forse si potrebbe ottenere un valore errato. Tuttavia, ho difficoltà a immaginare che sia possibile.

Fintantoché si esegue LAST_INSERT_ID() immediatamente dopo lo INSERT, si è sempre verificato il valore corretto.

Ecco come si potrebbe rompere se si voleva davvero:

$db_obj->insert('some data'); 
$db_obj->some_function_that_also_inserts_but_i_forgot_it_does_that('derp'); 
$id = $db_obj->last_insert_id(); 
+0

grazie per il tuo commento, non posso upvote la tua risposta a causa della mia reputazione, ma grazie davvero. –

+0

@JoseFaro fai clic sulla casella di controllo per accettare la risposta, è * way * migliore di un upvote. – Sammitch