使用 PHP 和 MYSQL 生成唯一 ID
题
您好,我正在创建一个处理 ID 和 UID 的系统,我们随机生成 UID,但我有点卡住了,我需要始终生成数据库中当前不存在的 UID,因为该字段是使用的唯一字段以免暴露真实身份。
所以回顾一下,我试图生成一个当前不存在于数据库中的唯一ID,我没有工作的部分是数据库中的交叉检查,所以有时它会给出数据库中已经存在的数字,即使它不应该提前感谢。
到目前为止,这是我的代码:
function uniqueID($table)
{
$db = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME);
$possible = '1234567890';
$code = '';
$characters = mt_rand(7,14);
$i = 0;
while($i < $characters)
{
$code .= substr($possible, mt_rand(0, strlen($possible)-1), 1);
$i++;
}
$result = $db->query('
SELECT uniqueID
FROM '.$table.'
WHERE uniqueID = "'.$code.'"
LIMIT 1
');
$totalRows = $result->num_rows;
if(!$result)
{
return $db->error;
}
else
{
if($totalRows > 0)
{
return uniqueID($table);
}
else
{
return $code;
}
}
}
解决方案 6
我想出了问题已经是什么,正如我向大家所述代码的那样不是问题!问题是交叉检查没有正常工作。所以我所做的就是删除了这个循环
while($i < $characters)
{
$code .= substr($possible, mt_rand(0, strlen($possible)-1), 1);
$i++;
}
.
因为这导致我的唯一身份证结束了错误。
其他提示
要生成Unic UID,您可以使用时间,我认为这是一个非常小的Chanse,记录将在同一个第二个中添加,有两个随机数据。
写一些函数,将它返回给您,如此
function generate_uid(){
return md5(mktime()."-".rand()."-".rand());
}
. PHP中有一个函数叫做 uniqid()
我可以谈论生成ID,就像其他人一样,但这不是你的问题。 你的查询似乎很好。如果它返回0行,但似乎在数据库中找到代码,那么很可能它只看起来相同,但实际上不是。它可以用空格填充。
解决此方法是通过选择用户数据库的最后一行,并将脚本检查为ID字段(通过在后代模式下执行id执行SELECT订购),您可以使用该信息对于随机化数字大于该ID。
编辑
$result = $db->query('
SELECT uniqueID
FROM '.$table.'
');
$already_in_database = array();
while ($row = mysql_fetch_array($result)){
$already_in_database[] = $row['UID'];
}
$new = rand(0,$some_max_value);
while(in_array($new,$already_in_database)){
$new = rand(0,$some_max_value);
}
. 不隶属于 StackOverflow