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

mysqlテーブルの一意の電子メールアドレスに基づく一意のコード?

    これがお役に立てば幸いです:

    a) これと非常によく似た方法で、URLとして使用される一意のコードを生成しました。コードを生成するためにこれを書きました:

    private function _generateCode($length = 5) {
    
        $characters = 'bcdfghjkmnpqrstvwxyz';
    
        $string = '';
        for ($i = 0; $i < $length; $i++) {
            $string .= $characters[rand(0, strlen($characters) - 1)];
        }
    
        return $string;
    
    }
    

    $ charactersは、「許可された」文字の文字列です。不要な単語を作成する可能性がないように、母音を削除することにしました:)これを変更できます。もっと簡単な書き方がありますが、かなり具体的なものが必要でした。

    次のように使用します:

    $unique_code = _generateCode();
    

    b) このためには、挿入ステートメントをselectステートメントでラップして、その一意のコードを確認します。コードが存在する場合は、別のコードを生成して再試行してください。これを行う1つの方法は次のとおりです(注:これはテストされておらず、すべてのコードを使い果たした状況に陥った場合、無限ループの影響を受けやすい可能性があります;)そしておそらくチェックを追加する必要がありますINSERTが成功したことを確認するため):

    $unique_code = "";
    $inserted = false;
    // Keep looping until we've inserted a record
    while(!$inserted) {
        // Generate a code
        $unique_code = _generateCode();
        // Check if it exists
        if ($result = mysqli->query("SELECT unique_code FROM coming_soon_emails WHERE unique_code = '$unique_code'")) {
            // Check no record exists
            if ($result->num_rows == 0) {
                // Create new record
                $mysqli->query("INSERT INTO coming_soon_emails (email,unique_code) VALUES ('" . $mysqli->real_escape_string($_POST['email']) . "','$unique_code')");
                // Set inserted to true to ext loop
                $inserted = true;
                // Close the result object
                $result->close();
            }
        } else {
            // Quit if we can't check the database
            die('Something went wrong with select');
        }   
    }
    
    // Output the code
    echo $unique_code;
    

    c) 一意のコードを挿入するには、これを挿入ステートメントに追加するだけです。ここで、$ unique_codeは、上記の関数からの戻り値が割り当てられた変数です。

    $mysqli->query("INSERT INTO coming_soon_emails (email,unique_code) VALUES ('".$mysqli->real_escape_string($_POST['email'])."','$unique_code')");
    

    d) コードを割り当てた変数をエコーするだけです。例:

    echo $unique_code;
    


    1. CakePHP3で複数のデータベースに接続する

    2. IDに依存せずにMySQLの1行おきに選択しますか?

    3. mysqlストアドプロシージャ:limitステートメントで宣言された変数を使用するとエラーが返されます

    4. MySQL:ビューとストアドプロシージャ