Mysql
 sql >> Database >  >> RDS >> Mysql

LastInsertId di PDO per MySQL è una condizione di competizione?

MySQL non restituisce l'ultimo ID di inserimento di una sessione a un'altra sessione.

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

Re i tuoi commenti:

Questo è stato il comportamento di MySQL sin dall'inizio. Restituire l'ultimo ID di inserimento sarebbe piuttosto inutile se fosse soggetto a una race condition, ovvero se gli inserti in altre sessioni potrebbero inquinare la tua sessione.

Una possibilità è che tu stia utilizzando connessioni persistenti, perché le vecchie versioni di PHP presentavano un bug per cui una connessione poteva essere fornita a una nuova richiesta PHP e concedere l'accesso allo stato con ambito sessioni da una precedente richiesta PHP. In altre parole, cose come blocchi e transazioni e tabelle temporanee e variabili utente e ID dell'ultimo inserimento potrebbero sopravvivere a una successiva richiesta PHP. Questi problemi dovrebbero essere risolti in PHP 5.3 con il driver mysqlnd; una connessione persistente dovrebbe essere "reimpostata" allo stato iniziale.

Un'altra possibile spiegazione è che funziona davvero correttamente e ti sbagli nelle tue osservazioni. Quindi suggerirei di testarlo con attenzione e metodicamente.

aggiornamento: secondo la tua risposta , questo problema non ha nulla a che fare con MySQL o PDO o lastInsertId. Sembra che tu non vedessi affatto discrepanze nell'output del tuo codice PHP, che vedessi numeri imprevisti nelle statistiche sulle prestazioni di rete in Chrome Dev Tools.