如何使用PHP和MySQL基于当前表行生成随机唯一ID?

时间:2013-03-10 08:29:19

标签: php mysql

我有一个具有自动增量“id”的表。我在同一个表中有另一列有一个“键”,我希望它基于自动增量“id”。这将确保永远不会有重复的“密钥”。我希望最好有一个6个字符的唯一id生成器。我找到了这个online,但我愿意接受其他建议。

2 个答案:

答案 0 :(得分:0)

echo $result['id'] . '_' . uniqid('', true);

这将产生类似于1_513c5858c04967.71142475的东西,前缀ID_将始终基于数据库的唯一

不够独特吗?

啊,你想要6个字符,那么:

function randString($length, $charset='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789')
{
    $str = '';
    $count = strlen($charset);
    while ($length--) {
        $str .= $charset[mt_rand(0, $count-1)];
    }

    return $str;
}

  $key = $result['id'] . '_' . randString(6); //this is unique, cause even you get at a chance of a million that you will get 2 same randString(6); you will have always unique prefix ID_ so you will have 1_G7owOq and 2_G7owOq

  //the code below is just an example of how to loop column for unique key and u dont need it :P just maybe someone else needs it.
  while(mysqli_num_rows(mysqli_query($con, "SELECT id FROM table WHERE key = '".mysqli_real_escape_string($con, $key)."'")) > 0) { 
    $key = $result['id'] . '_' . randString(6); 
  }

答案 1 :(得分:0)

然后我在这里发布了你的最后一种方式:

$key = randString(6);
while(mysqli_num_rows(mysqli_query($con, "SELECT id FROM table WHERE key = '".mysqli_real_escape_string($con, $key)."'")) > 0) { 
    $key = randString(6); 
}

它将始终创建随机的6个char键,因为如果它在db中已经存在已经存在的键,它将重新创建新的等等,直到它的唯一:]这是你的最佳方式,这样我'我也用:]

实际上,最好的方法是生成具有所有现有唯一密钥(62 ^ 6)*每个密钥6个字节的表 - > 317 GB如果我没有弄错(上午):]我不认为你会达到1/10000:]