PHP interfaccia l'API di MySQL last_insert_id() per ritornare l'indice associato ad un campo AUTO_INCREMENT del record che abbiamo appena inserito, la funzione che lo permette è mysql_inserted_id($link)
.
In pratica capita spesso di dover inserire in una tabella un record di definizione di una insieme di oggetti che verranno inseriti in un'altra tabella, ad esempio una nuova categoria di prodotti ed un elenco di prodotti legati alla nuova categoria.
Per fare questo in un'unica pagina diventa necessario conoscere l'ultimo valore che è stato generato da MySQL nel campo AUTO_INCREMENT della tabelle, consideriamo questo semplice esempio in cui supponiamo di ricevere in input la descrizione di una nuova categoria e di un prodotto ad essa associato, in pratica il risultato di una print_r dei valori che ci arrivano in POST sia qualcosa del tipo
Array
(
[desc_cat] => 'cibi'
[desc_prod] => 'pasta'
)
Possiamo inserire la nuova categoria e associarvi i nuovi prodotti direttamente in un unica pagina, tramite codice del tipo
$sql = "INSERT INTO categoria (id, descrizione) VALUES (NULL, '".$_POST['descrizione']."')"; // sia id di tipo AUTO_INCREMENT
$result = mysql_query ($sql);
$new_id_cat = mysql_inserted_id();
$sql = "INSERT INTO prodotto (id, id_categoria, descrizione) VALUES (NULL, '$new_id_cat', '".$_POST['descrizione']."')"; // sia id di tipo AUTO_INCREMENT
$result = mysql_query ($sql);
mysql_inserted????
mysql_inserted_id();
sei sicuro che la funzione si chiama così? Dovrebbe essere mysql_insert_id()
Direttamente in MySQL
Lo stesso risultato lo si ottiene modificando la seconda query con:
VALUES (NULL, LAST_INSERT_ID(),'".$_POST['descrizione']."')
ERRATA CORRIGE
La funzione mysql_inserted_id non la ritrovo nemmeno in php.net, credo sia dovuto ad un errore di battitura.
Saluti
Luigi C.
c'è un errore...
A me risulta che sia mysql_insert_id() e non mysql_inserted_id()