Mysql
 sql >> Base de données >  >> RDS >> Mysql

insert mysqli - mais seulement s'il ne s'agit pas d'un doublon

Pensez à mettre un unique index sur cette table particulière. Le code suivant ajoutera l'index et supprimera tous les doublons actuels :

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

Une fois ceci ajouté, utilisez INSERT IGNORE ou INSERT...ON DUPLICATE KEY UPDATE . Ils ne préformeront l'insert que s'il n'y a pas de doublons.

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

Mysql renverra une erreur car l'e-mail est déjà dans la base de données. Cependant, la commande IGNORE indique au script de ne pas prêter attention aux erreurs de cette requête car, dans ce cas, vous l'attendez pour une ligne en double.

De plus, il existe un moyen d'alerter votre utilisateur avec un message d'échec ou de réussite, même avec INSERT IGNORE . Utilisez MYSQL LAST_INSERT_ID() . Si un ID a été donné, il a été inséré. Si ce n'est pas le cas, alors l'e-mail était déjà là (ou il y a eu une autre erreur).