sql >> Databasteknik >  >> RDS >> Mysql

Unik kod baserad på unik e-postadress i mysql-tabellen?

Hoppas detta hjälper:

a) Jag gjorde något väldigt likt detta där jag genererade unika koder som skulle användas som URL:er. Jag skrev detta för att generera koderna:

private function _generateCode($length = 5) {

    $characters = 'bcdfghjkmnpqrstvwxyz';

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

    return $string;

}

$characters är en sträng med "tillåtna" tecken. Vi valde att ta bort vokalerna så att det inte fanns någon chans att göra oönskade ord :) Detta kunde du ändra på. Det finns enklare sätt att skriva det på men vi behövde något ganska specifikt.

Du skulle använda det så här:

$unique_code = _generateCode();

b) För detta är det bara att linda in din insert-sats i en select-satskontroll för den unika koden. Om koden finns, generera en annan kod och försök igen. Ett sätt du kan göra detta på är (OBS:detta är inte testat och det kan vara mottagligt för en oändlig loop om du råkar hamna i en situation där du har använt upp alla dina koder;) Och du bör nog lägga till en check för att säkerställa att INSERT lyckades):

$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) För att infoga den unika koden lägg bara till detta i din infoga-sats där $unique_code är variabeln som tilldelas returvärdet från funktionen ovan:

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

d) Jag upprepar bara variabeln du tilldelade koden till t.ex.:

echo $unique_code;


  1. MySQL grupperar resultat efter tidsperioder

  2. Om mysql_num_rows är lika med NOLL fungerar INTE

  3. PÅ DUBLIKATNYCKEL:unik begränsning med flera kolumner

  4. TNS-12519 utan maximala processer uppnådda