我陷入困境。我需要在我的数据库表中使用唯一的字符串在url中显示它(我不在url中显示id)。
我希望在php中生成唯一的字符串检查,如果不生成新的,它在表中是唯一的。
对于长度为8个字符且行数较多(约100,000行)的字符串,您对性能有何看法。
答案 0 :(得分:1)
您可以使用uniqid()
在PHP中创建唯一ID。
生成新ID时,请检查数据库是否存在。如果是,请创建一个新的。 假设您在数据库中的该列上设置索引,这些检查不会非常昂贵。
伪( - )代码:
while (true) {
$id = uniqid();
if (!id_exists_in_db($id)) // we have a unique id
break;
}
答案 1 :(得分:1)
除了生成除id之外的唯一键,您还可以创建一个将id散列或编码为字符串的函数。例如,您可以将整数转换为8个字符的十六进制表示。如果你愿意,你可以让它变得更复杂,但是,编写一个使用固定公式将数字转换为8个字母的函数相当容易,反之亦然。这样,您就不需要存储这些额外数据,也不必担心该值是唯一的。
<?php
function translate($key, $back)
{
$key = str_pad($key, 8, '0', STR_PAD_LEFT);
$a = array('1','2','3','4','5','6','7','8','9','0');
$b = array('a','b','c','d','e','f','g','h','i','j');
if ($back) {$c = $b; $b = $a; $a = $c;}
return str_replace($a, $b, $key);
}
function encode_id($int)
{
return translate($int, false);
}
function decode_id($key)
{
return (int)translate($key, true);
}
$key = encode_id(40000);
$int = decode_id($key);
echo $key;
echo '<br>';
echo $int;