Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Làm thế nào để ngăn chặn trùng lặp tên người dùng khi mọi người đăng ký?

Cách tốt nhất để ngăn trùng lặp tên người dùng trong cơ sở dữ liệu là đặt cột cơ sở dữ liệu CHÍNH LÀ TỪ KHÓA CHÍNH hoặc đánh dấu nó là DUY NHẤT.

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

Điều này sẽ ngăn các bản ghi trùng lặp trong bảng có cùng tên người dùng. Khi bạn cố gắng chèn cùng một cái thì sẽ xảy ra lỗi.

Sau đó, bạn có thể bắt ngoại lệ trong PHP và kiểm tra lý do. Mã lỗi SQL ràng buộc trùng lặp là 1062.

Dưới đây là một ví dụ về cách bắt lỗi này khi sử dụng 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!";
    }
}

Dưới đây là một ví dụ về cách bắt lỗi này khi sử dụng 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. MySQLDumper:Một công cụ sao lưu cơ sở dữ liệu MySQL dựa trên PHP và Perl

  2. Thay thế cho Intersect trong MySQL

  3. Hiển thị các giá trị từ bảng cơ sở dữ liệu MySQL bên trong bảng HTML trên trang web

  4. Làm thế nào để nhận được ngày đầu tiên của mỗi tháng tương ứng trong mysql?

  5. Ví dụ DAYNAME () - MySQL