Originariamente inviato da EvilBoy
Perchè sul link che mi hai mandato c'è un tizio che fa il lock?
codice:
<?
mysql_query("LOCK TABLES apc_forms WRITE");
mysql_query("SET AUTOCOMMIT = 0");
mysql_query("INSERT INTO apc_forms (form_title, form_event_id, form_expirey) 
            VALUES ('title',1,'2005-10-10')");
define('ID',mysql_query("SELECT LAST_INSERT_ID()"));
mysql_query("COMMIT");
mysql_query("UNLOCK TABLES");
?>
Quel tizio usa LAST_INSERT_ID() che e' una funzione di mysql SERVER che rende sempre l'ultimo id inserito. Da qualunque CLIENT esso sia stato eseguito, quindi serve il blocco della tabella.

mysql_insert_id() e' una funzione del CLIENT mysql installato su php. Rileva esclusivamente l'id inserito dallo stesso CLIENT e se accompagnato dal resource id# della connessione esclusivamente da questa. Deve essere eseguito dopo un INSERT e assolutamente prima di qualsiasi altra query (il valore sarebbe zero o errato).

Sarebbe (e') necessario assicurarsi di almeno una delle due cose(o anche entrambe):

mysql_query("INSERT ... ) ha reso il valore 1. Se rendesse zero fermare con errore l'esecuzione dello script.

mysql_insert_id($conn) ha reso un valore > 0. Se rendesse zero fermare con errore l'esecuzione dello script.





ps.: quella query che hai segnalato e' pure senza controllo. Se l'INSERT dovesse fallire per qualsiasi ragione si andrebbe a leggere l'ultimo id inserito da chissa' chi.....