Överväg att sätta en unique
index på just denna tabell. Följande kod lägger till indexet och tar bort alla aktuella dubbletter:
ALTER IGNORE TABLE `RegisteredUsersTable` ADD UNIQUE INDEX unique_email (`UserEmail`);
När detta har lagts till, använd INSERT IGNORE
eller INSERT...ON DUPLICATE KEY UPDATE
. De kommer bara att förforma infogningen om det inte finns några dubbletter.
$mysqli->query("INSERT IGNORE INTO RegisteredUsersTable (UserName, UserEmail) VALUES ('".$newUserName."', '".$newUserEmail."')");
Mysql kommer att skicka ett felmeddelande eftersom e-postmeddelandet redan finns i databasen. IGNORE-kommandot säger dock åt skriptet att inte uppmärksamma felen för den här frågan eftersom du i det här fallet förväntar dig att det är en dubblettrad.
Det finns också ett sätt att varna din användare med ett misslyckande eller framgångsmeddelande, även med INSERT IGNORE
. Använd MYSQL LAST_INSERT_ID()
. Om ett ID angavs sattes det in. Om inte, så fanns e-postmeddelandet redan där (eller så var det ett annat fel).