Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Jak zapobiec duplikowaniu nazw użytkowników, gdy ludzie się rejestrują?

Najlepszym sposobem zapobiegania duplikowaniu nazw użytkowników w bazie danych jest utworzenie kolumny PRIMARY KEY lub oznaczenie jej jako 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);

Zapobiegnie to duplikowaniu rekordów w tabeli o tej samej nazwie użytkownika. Gdy spróbujesz wstawić ten sam, zostanie wygenerowany błąd.

Następnie możesz złapać wyjątek w PHP i sprawdzić przyczynę. Zduplikowany kod błędu SQL ograniczenia to 1062.

Oto przykład, jak złapać ten błąd podczas używania 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!";
    }
}

Oto przykład, jak złapać ten błąd podczas korzystania z 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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Znajdź zduplikowane rekordy w MySQL

  2. Jak MySQL przetwarza ORDER BY i LIMIT w zapytaniu?

  3. 3 sposoby na znalezienie pozycji podciągu w ciągu w MySQL

  4. Wydajność MYSQL OR vs IN

  5. Błąd podczas ładowania modułu MySQLdb „Czy zainstalowałeś mysqlclient lub MySQL-python?”