Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Unikalny kod oparty na unikalnym adresie e-mail w tabeli mysql?

Mam nadzieję, że to pomoże:

a) Zrobiłem coś bardzo podobnego do tego, gdzie generowałem unikalne kody, które miały być używane jako adresy URL. Napisałem to, aby wygenerować kody:

private function _generateCode($length = 5) {

    $characters = 'bcdfghjkmnpqrstvwxyz';

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

    return $string;

}

$characters to ciąg "dozwolonych" znaków. Zdecydowaliśmy się usunąć samogłoski, aby nie było szans na zrobienie niechcianych słów :) Możesz to zmienić. Są prostsze sposoby na napisanie tego, ale potrzebowaliśmy czegoś całkiem konkretnego.

Używałbyś go w ten sposób:

$unique_code = _generateCode();

b) W tym celu po prostu zapakuj swoją instrukcję INSERT w SELECT, aby sprawdzić ten unikalny kod. Jeśli kod istnieje, wygeneruj kolejny kod i spróbuj ponownie. Jednym ze sposobów, w jaki możesz to zrobić, jest (Uwaga:nie jest to testowane i może być podatne na nieskończoną pętlę, jeśli znajdziesz się w sytuacji, w której zużyłeś wszystkie swoje kody;) I prawdopodobnie powinieneś dodać czek aby upewnić się, że WSTAWKA zakończyła się powodzeniem):

$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) Aby wstawić unikalny kod, po prostu dodaj to do swojej instrukcji insert, gdzie $unique_code jest zmienną, której przypisano wartość zwracaną z powyższej funkcji:

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

d) Po prostu powtórz zmienną, do której przypisałeś kod, np.:

echo $unique_code;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. w mysql, przy usuwaniu kaskady nie działa

  2. Grupuj według daty tylko w kolumnie Datetime

  3. mySQL:Łączenie trzech tabel - jak?

  4. Nieaktualna kolumna w tabeli mysql

  5. MySQL konwertuje YEARWEEK na datę