循环检查数据是否存在

时间:2019-01-15 03:59:26

标签: php database codeigniter md5

我试图将令牌创建为用户唯一的引用,因此我使用md5生成了令牌。但是,我听说有重复的可能性。然后,每次按以下方式生成令牌时,我都尝试先检查令牌,然后再将其插入数据库。

  1. 从表中选择token_column,其中token_column!= generate_token。
  2. 如果generate_token存在,请生成new并再次检查表。
  3. 如果不存在generate_token,请将其插入数据库。

控制器

private function generateToken(){
    $token = strtoupper(md5(rand()));

    $sql = 'SELECT id, token FROM UserReferral WHERE token != '.$token;

    $is_exist = $this->Database_model->readOneQuery($sql);

    if(!empty($is_exist)){
        // Insert data into database
    } else {
        $token = strtoupper(md5(rand()));
        // check database again to see if the token is already exist
    }
}

模型

function readOneQuery($sql){
    $r = $this->db->query($sql)->row_array();
    return !empty($r) ? $r : false;
}

如果我这样做,检查似乎无止境。有什么更好的方法可以用来进行数据检查吗?

1 个答案:

答案 0 :(得分:-1)

MD5较旧且不安全:https://security.stackexchange.com/questions/19906/is-md5-considered-insecure

请考虑使用安全性更高的产品,例如SHA或什至更好的产品, password_hash http://php.net/manual/en/function.password-hash.php