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