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

mysqli insert - ma solo se non è un duplicato

Considera di inserire un unique indice su questa particolare tabella. Il codice seguente aggiungerà l'indice e rimuoverà eventuali duplicati correnti:

ALTER IGNORE TABLE `RegisteredUsersTable` ADD UNIQUE INDEX unique_email (`UserEmail`);

Una volta aggiunto, usa INSERT IGNORE o INSERT...ON DUPLICATE KEY UPDATE . Preformeranno l'inserto solo se non ci sono duplicati.

$mysqli->query("INSERT IGNORE INTO RegisteredUsersTable (UserName, UserEmail) VALUES ('".$newUserName."', '".$newUserEmail."')");

Mysql genererà un errore perché l'e-mail è già nel database. Tuttavia, il comando IGNORA sta dicendo allo script di non prestare attenzione agli errori per questa query perché, in questo caso, ti aspetti una riga duplicata.

Inoltre, c'è un modo per avvisare l'utente con un messaggio di errore o successo, anche con INSERT IGNORE . Usa MYSQL LAST_INSERT_ID() . Se è stato fornito un ID, è stato inserito. In caso contrario, l'e-mail era già presente (o si è verificato un altro errore).