Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Código exclusivo baseado em endereço de e-mail exclusivo na tabela mysql?


Espero que isto ajude:

a) Eu fiz algo muito parecido com isso onde eu estava gerando códigos únicos que deveriam ser usados ​​como URLs. Eu escrevi isso para gerar os 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;

}

$characters é uma string de caracteres "permitidos". Optamos por remover as vogais para que não houvesse chance de formar palavras indesejadas :) Você pode alterar isso. Existem maneiras mais simples de escrevê-lo, mas precisávamos de algo bem específico.

Você usaria assim:
$unique_code = _generateCode();

b) Para isso, basta envolver sua instrução insert em uma instrução select e verificar esse código exclusivo. Se o código existir, gere outro código e tente novamente. Uma maneira de fazer isso é (NB:isso não foi testado e pode ser suscetível a um loop infinito se você entrar em uma situação em que usou todos os seus códigos;) E você provavelmente deve adicionar uma verificação para certificar-se de que o INSERT foi bem sucedido):
$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 inserir o código exclusivo, basta adicionar isso à sua instrução de inserção, onde $unique_code é a variável atribuída ao valor de retorno da função acima:
$mysqli->query("INSERT INTO coming_soon_emails (email,unique_code) VALUES ('".$mysqli->real_escape_string($_POST['email'])."','$unique_code')");

d) Apenas echo a variável à qual você atribuiu o código, por exemplo:
echo $unique_code;