Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

mysqli insert - mas apenas se não for duplicado


Considere colocar um unique índice nesta tabela em particular. O código a seguir adicionará o índice e removerá quaisquer duplicatas atuais:
ALTER IGNORE TABLE `RegisteredUsersTable` ADD UNIQUE INDEX unique_email (`UserEmail`);

Depois que isso for adicionado, use INSERT IGNORE ou INSERT...ON DUPLICATE KEY UPDATE . Eles só irão pré-formar a inserção se não houver duplicatas.
$mysqli->query("INSERT IGNORE INTO RegisteredUsersTable (UserName, UserEmail) VALUES ('".$newUserName."', '".$newUserEmail."')");

O MySQL lançará um erro porque o email já está no banco de dados. No entanto, o comando IGNORE está dizendo ao script para não prestar atenção aos erros dessa consulta porque, nesse caso, você espera isso para uma linha duplicada.

Além disso, existe uma maneira de alertar seu usuário com uma mensagem de falha ou sucesso, mesmo com INSERT IGNORE . Use MYSQL LAST_INSERT_ID() . Se um ID foi fornecido, ele foi inserido. Caso contrário, o e-mail já estava lá (ou houve outro erro).