Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Wie kann man doppelte Benutzernamen bei der Registrierung verhindern?

Der beste Weg, doppelte Benutzernamen in der Datenbank zu verhindern, besteht darin, die Datenbankspalte PRIMARY KEY zu machen oder sie als UNIQUE zu markieren.

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

Dadurch werden doppelte Einträge in der Tabelle mit demselben Benutzernamen verhindert. Wenn Sie versuchen, dasselbe einzufügen, wird ein Fehler generiert.

Sie können die Ausnahme dann in PHP abfangen und den Grund überprüfen. Der doppelte Constraint-SQL-Fehlercode ist 1062.

Hier ist ein Beispiel, wie dieser Fehler bei der Verwendung von PDO abgefangen werden kann:

$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!";
    }
}

Hier ist ein Beispiel dafür, wie Sie diesen Fehler bei der Verwendung von mysqli abfangen:

$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!";
    }
}