sql >> Databasteknik >  >> RDS >> Mysql

mysqli infoga - men bara om det inte är en dubblett

Ö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).



  1. Begränsa PostgreSQL-användaråtkomst med hjälp av schema och vyer

  2. SQLAlchemy func.count på boolesk kolumn

  3. ERROR 1064 (42000):Du har ett fel i din SQL-syntax; kontrollera manualen som motsvarar din MySQL-serverversion för rätt syntax att använda

  4. Docker compose mysql-anslutning misslyckas