sql >> Database teknologi >  >> RDS >> Mysql

Unik kode baseret på unik e-mailadresse i mysql-tabel?

Håber dette hjælper:

a) Jeg gjorde noget meget lig dette, hvor jeg genererede unikke koder, som skulle bruges som URL'er. Jeg skrev dette for at generere koderne:

private function _generateCode($length = 5) {

    $characters = 'bcdfghjkmnpqrstvwxyz';

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

    return $string;

}

$characters er en streng af "tilladte" tegn. Vi valgte at fjerne vokalerne, så der ikke var en chance for at lave uønskede ord :) Dette kunne du ændre. Der er enklere måder at skrive det på, men vi havde brug for noget helt specifikt.

Du ville bruge det sådan her:

$unique_code = _generateCode();

b) Til dette skal du blot pakke din insert-sætning ind i en select statement-check for den unikke kode. Hvis koden findes, så generer en anden kode og prøv igen. En måde du kan gøre dette på er (NB:dette er ikke testet, og det kan være modtageligt for en uendelig løkke, hvis du tilfældigvis kommer i en situation, hvor du har brugt alle dine koder;) Og du skal nok tilføje en check for at sikre, at INSERT var vellykket):

$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) For at indsætte den unikke kode skal du blot tilføje dette til din insert-sætning, hvor $unique_code er den variabel, der er tildelt returværdien fra funktionen ovenfor:

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

d) Bare gentag den variabel, du tildelte koden til, f.eks.:

echo $unique_code;


  1. Laravel - Ugyldigt parameternummer:parameter blev ikke defineret

  2. Android Studio kan ikke finde eksplicit aktivitetsklasse

  3. hvordan får man et sorteret resultat i mysql-forespørgsel?

  4. Tips til migrering fra MySQL-replikering til MySQL Galera Cluster 4.0