sql >> Database >  >> RDS >> Mysql

Hoe dubbele gebruikersnamen voorkomen wanneer mensen zich registreren?

De beste manier om dubbele gebruikersnamen in de database te voorkomen, is door de databasekolom PRIMAIRE SLEUTEL te maken of deze als UNIEK te markeren.

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

Dit voorkomt dubbele records in de tabel met dezelfde gebruikersnaam. Wanneer u dezelfde probeert in te voegen, wordt er een fout gegenereerd.

U kunt dan de uitzondering in PHP opvangen en de reden controleren. De dubbele beperking SQL-foutcode is 1062.

Hier is een voorbeeld van hoe u deze fout kunt opvangen bij het gebruik van 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!";
    }
}

Hier is een voorbeeld van hoe u deze fout kunt opvangen bij het gebruik van 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!";
    }
}


  1. SQLite JSON_ARRAY()

  2. Hoe een enum-typewaarde in postgres te verwijderen?

  3. Controleer of er een tijdelijke tabel bestaat en verwijder deze als deze bestaat voordat u een tijdelijke tabel maakt

  4. Foutmelding:peer-authenticatie mislukt voor gebruiker postgres, bij het proberen om pgsql met rails te laten werken