Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Bagaimana mencegah duplikat nama pengguna saat orang mendaftar?

Cara terbaik untuk mencegah duplikat nama pengguna dalam database adalah dengan membuat kolom database PRIMARY KEY atau menandainya sebagai UNIK.

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

Ini akan mencegah duplikat catatan dalam tabel dengan nama pengguna yang sama. Saat Anda mencoba memasukkan yang sama, maka kesalahan akan dibuat.

Anda kemudian dapat menangkap pengecualian di PHP dan memeriksa alasannya. Kode kesalahan SQL kendala duplikat adalah 1062.

Berikut adalah contoh bagaimana menangkap kesalahan ini saat menggunakan 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!";
    }
}

Berikut adalah contoh cara menangkap kesalahan ini saat menggunakan 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. Cara Mengakses MySQL dengan Pengguna Root MySQL

  2. Ganti Ke Sintaks Kueri

  3. Bandingkan hanya hari dan bulan dengan bidang tanggal di mysql

  4. Kesalahan saat mengirim paket QUERY

  5. Bagaimana cara MYSQL Self-Join Bekerja?