使用PHP和MYSQL生成唯一ID

时间:2012-03-12 13:42:56

标签: php mysql uid unique-id

您好我正在创建一个处理ID和UID的系统,我们随机生成的UID但我有点卡住,我需要始终生成一个当前不存在于数据库中的UID,因为该字段是前端使用的唯一字段,以便不暴露真实ID。

所以回顾一下,我正在尝试生成一个当前不存在于DB中的唯一ID我没有工作的部分是db中的交叉检查,所以它有时会给出一个已经存在的数字db尽管它不应该提前感谢。

到目前为止,这是我的代码:

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 个答案:

答案 0 :(得分:3)

答案 1 :(得分:3)

要生成unic UID,你可以使用时间,我认为这是一个非常小的变化,记录将在同一秒内添加,带有两个随机数据。

编写一些函数,将其返回给你

function generate_uid(){
 return md5(mktime()."-".rand()."-".rand());
}

答案 2 :(得分:3)

在PHP中有一个名为uniqid()

的函数

http://php.net/manual/en/function.uniqid.php

答案 3 :(得分:1)

我可以像其他人那样谈论生成ID,但这不是你的问题。 您的查询似乎很好。如果它返回0行,但你似乎在数据库中找到了代码,那么很可能它只是看起来相同,但实际上并非如此。它可以用空格填充。

答案 4 :(得分:0)

解决此问题的一种方法是选择用户数据库的最后一行并让您的脚本检查id字段(您可以通过在后代模式下按ID执行选择排序来实现此目的)然后您可以使用该信息用于随机化大于该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);
}

答案 5 :(得分:0)

我弄清楚问题已经存在,正如我所提到的,代码生成不是问题!问题是交叉检查无法正常工作。所以我所做的就是删除了这个循环

while($i < $characters) 
{ 

    $code .= substr($possible, mt_rand(0, strlen($possible)-1), 1);
    $i++;

}

因为这导致我的唯一ID错误。