sql >> Base de Datos >  >> RDS >> Mysql

¿Código único basado en una dirección de correo electrónico única en la tabla mysql?

Espero que esto ayude:

a) Hice algo muy similar a esto donde estaba generando códigos únicos que se usarían como URL. Escribí esto para generar los códigos:

private function _generateCode($length = 5) {

    $characters = 'bcdfghjkmnpqrstvwxyz';

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

    return $string;

}

$caracteres es una cadena de caracteres "permitidos". Elegimos eliminar las vocales para que no hubiera posibilidad de formar palabras no deseadas :) Podrías cambiar esto. Hay formas más sencillas de escribirlo, pero necesitábamos algo bastante específico.

Lo usarías así:

$unique_code = _generateCode();

b) Para esto, simplemente envuelva su declaración de inserción en una verificación de declaración de selección para ese código único. Si el código existe, genere otro código y vuelva a intentarlo. Una forma en que podría hacer esto es (NB:esto no está probado y puede ser susceptible a un bucle infinito si se encuentra en una situación en la que ha usado todos sus códigos;) Y probablemente debería agregar un cheque para asegurarse de que la INSERCIÓN fue exitosa):

$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) Para insertar el código único, simplemente agregue esto a su declaración de inserción donde $unique_code es la variable a la que se le asigna el valor de retorno de la función anterior:

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

d) Simplemente haga eco de la variable a la que asignó el código, por ejemplo:

echo $unique_code;