PHP: lock delle tabelle e restituzione dell’ID relativo all’ultimo record inserito

Durante la realizzazione di un portale multiutente, ho riscontrato la necessità di ricavare l’ID dell’ultimo record inserito, in modo da salvarlo all’interno di un’altra tabella. Essendo però, come già detto, un portale multiutente, ho deciso di evitare eventuali comportamenti “imprevisti” semplicemente effettuando un LOCK/UNLOCK delle tabelle interessate. Nella fattispecie ecco il codice PHP:

$lock = $mysqli->query("LOCK TABLE cartaimbarco WRITE");

$insert = $mysqli->query("INSERT INTO cartaimbarco (DataPartenza, Prezzo) VALUES ('$datapartenza', '$prezzo')");

$idcarta = $mysqli -> insert_id;

$unlock = $mysqli->query("UNLOCK TABLES");

Per prima cosa “blocco” la tabella “cartaimbarco” in scrittura. Successivamente inserisco all’interno di tale tabella un record e ne ricavo l’ID utilizzando $mysqli -> insert_id; (come potete notare sto utilizzando il paradigma ad oggetti e non quello procedurale). L’equivalente nel paradigma procedurale di tale chiamata è la funzione mysql_insert_id().

Dopo aver ricavato l’ID del record “sblocco” le tabelle.

Ma perchè si rende necessario il LOCK/UNLOCK delle tabelle? Semplicemente perchè un altro utente potrebbe inserire un record immediatamente prima dell’istruzione $mysqli -> insert_id, la quale ci restituirà (erroneamente) l’ID del record inserito dall’altro utente (e non l’ID del record da noi inserito).

Spero di essere stato esauriente. A presto.

NB: $mysqli -> insert_id; restituirà 0 nel caso in cui L’ID non sia un campo AUTO_INCREMENT.

PHP: lock delle tabelle e restituzione dell’ID relativo all’ultimo record inseritoultima modifica: 2010-05-31T20:37:50+02:00da nazarenolatella
Reposta per primo quest’articolo