Php 循环检查数据是否存在

Php 循环检查数据是否存在,php,database,codeigniter,md5,Php,Database,Codeigniter,Md5,我试图创建一个令牌作为用户唯一的引用,因此我使用md5生成它。不过,我听说有重复的可能。然后,每次以以下方式生成令牌时,我都尝试在将其插入数据库之前检查令牌 从表中选择token_column!=生成的\u令牌。 如果生成的\u令牌存在,则生成新令牌并再次检查该表。 如果生成的\u令牌不存在,请将其插入数据库。 控制器 模型 如果我这样做,检查似乎没有结束。有没有更好的方法来检查数据?MD5很旧,不安全: 请考虑移动到更安全的东西,比如SHA,甚至更好,PasWorddHASH:这个问题缺少您的

我试图创建一个令牌作为用户唯一的引用,因此我使用md5生成它。不过,我听说有重复的可能。然后,每次以以下方式生成令牌时,我都尝试在将其插入数据库之前检查令牌

从表中选择token_column!=生成的\u令牌。 如果生成的\u令牌存在,则生成新令牌并再次检查该表。 如果生成的\u令牌不存在,请将其插入数据库。 控制器

模型


如果我这样做,检查似乎没有结束。有没有更好的方法来检查数据?

MD5很旧,不安全:


请考虑移动到更安全的东西,比如SHA,甚至更好,PasWorddHASH:

这个问题缺少您的代码方法。老实说,我仍然不明白为什么我的问题被标记为重复,而我的问题与被任命的职位完全不同。我问的是如何确保每次生成新令牌时数据库中没有重复数据。不是如何在插入数据库时使用双引号。作为重复链接的问题的答案可能不会最终解决您的问题,但是,md5是一个字符串,因此必须用引号括起来。因为这里没有涉及客户数据,所以在这种情况下,您可以在没有准备好的语句的情况下安全地进行操作。。。使用VALUES子句或WHERE子句。字符串是字符串,在SQL中的任何位置都会被引用。请从UserReferral中选择id、token,其中token!='$代币';如果这还不能解决您的问题,请让我投票支持重新开放。在这种情况下,编辑添加引号的问题,并更详细地描述观察到的行为,添加错误日志等。写一条包含@Quasimodo'sclone的评论来通知我。或者更好的是,你可以用修改后的代码打开一个新问题。是的,我知道,但我没有使用md5来散列密码。我只想为用户推荐生成一个随机密钥。比如当他们邀请他们的朋友注册网站时,我会把这个推荐作为一种象征。这不是问题,应该在评论中作为改进建议发布。
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;
}