sql >> データベース >  >> RDS >> Mysql

人々が登録するときに重複するユーザー名を防ぐ方法は?

    データベース内のユーザー名の重複を防ぐ最善の方法は、データベース列をPRIMARY KEYにするか、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);
    

    これにより、同じユーザー名でテーブル内のレコードが重複するのを防ぐことができます。同じものを挿入しようとすると、エラーが生成されます。

    次に、PHPで例外をキャッチし、理由を確認できます。重複する制約SQLエラーコードは1062です。

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

    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. テーブルGrupocakephpのFROM句エントリがありません

    2. SQL Server(T-SQL)で既存のテーブルの圧縮を有効にする方法

    3. Pythonを使用してSQLServerデータベースにcsvファイルを書き込む

    4. Docker:複数の画像を組み合わせる