sql >> Database >  >> RDS >> Mysql

Unieke code op basis van uniek e-mailadres in mysql-tabel?

Ik hoop dat dit helpt:

a) Ik deed iets vergelijkbaars, waarbij ik unieke codes genereerde die als URL's moesten worden gebruikt. Ik heb dit geschreven om de codes te genereren:

private function _generateCode($length = 5) {

    $characters = 'bcdfghjkmnpqrstvwxyz';

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

    return $string;

}

$characters is een reeks "toegestane" tekens. We hebben ervoor gekozen om de klinkers te verwijderen zodat er geen kans was op het maken van ongewenste woorden :) Je zou dit kunnen veranderen. Er zijn eenvoudigere manieren om het te schrijven, maar we hadden iets heel specifieks nodig.

Je zou het als volgt gebruiken:

$unique_code = _generateCode();

b) Wikkel hiervoor uw insert-statement in een select-statementcontrole voor die unieke code. Als de code bestaat, genereer dan een andere code en probeer het opnieuw. Een manier om dit te doen is (NB:dit is niet getest en het kan vatbaar zijn voor een oneindige lus als je in een situatie komt waarin je al je codes hebt opgebruikt;) En je moet waarschijnlijk een vinkje toevoegen om er zeker van te zijn dat de INSERT is gelukt):

$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) Om de unieke code in te voegen, voegt u deze toe aan uw insert-statement, waarbij $unique_code de variabele is waaraan de retourwaarde van de bovenstaande functie is toegewezen:

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

d) Echo gewoon de variabele waaraan u de code hebt toegewezen, bijvoorbeeld:

echo $unique_code;


  1. De beste manier om zoekopdrachten van gebruikers in ElasticSearch op te slaan?

  2. Best practices voor PostgreSQL-beveiliging

  3. Waarom maak je een View in een database?

  4. Waarden invoegen in de automatische identiteitskolom in MYSQL