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

Comment éviter les noms d'utilisateur en double lorsque les gens s'inscrivent ?

Le meilleur moyen d'éviter les noms d'utilisateur en double dans la base de données est de définir la colonne de base de données PRIMARY KEY ou de la marquer comme UNIQUE.

-- Make it a primary key
ALTER TABLE users ADD PRIMARY KEY(username);
-- or set it to be unique
ALTER TABLE users ADD UNIQUE (username);

Cela empêchera les enregistrements en double dans la table avec le même nom d'utilisateur. Lorsque vous essayez d'insérer le même, une erreur sera générée.

Vous pouvez ensuite intercepter l'exception dans PHP et vérifier la raison. Le code d'erreur SQL de contrainte en double est 1062.

Voici un exemple de la façon d'attraper cette erreur lors de l'utilisation de PDO :

$error = [];
$username = 'Dharman';

$pdo = new \PDO("mysql:host=localhost;dbname=test;charset=utf8mb4", 'user', 'password', [
    \PDO::ATTR_ERRMODE => \PDO::ERRMODE_EXCEPTION,  // make sure the error reporting is enabled!
    \PDO::ATTR_EMULATE_PREPARES => false
]);

try {
    $stmt = $pdo->prepare('INSERT INTO users(username) VALUE(?)');
    $stmt->execute([$username]);
} catch (\PDOException $e) {
    if ($e->errorInfo[1] === 1062) {
        $error[] = "This username is already taken!";
    }
}

Voici un exemple de la façon d'attraper cette erreur lors de l'utilisation de mysqli :

$error = [];
$username = 'Dharman';

// make sure the error reporting is enabled!
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$mysqli = new mysqli('localhost', 'user', 'password', 'test');
$mysqli->set_charset('utf8mb4');

try {
    $stmt = $mysqli->prepare('INSERT INTO users(username) VALUE(?)');
    $stmt->bind_param('s', $username);
    $stmt->execute();
} catch (\mysqli_sql_exception $e) {
    if ($e->getCode() === 1062) {
        $error[] = "This username is already taken!";
    }
}