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