独特的随机ID

时间:2010-05-17 16:50:22

标签: php global-variables scope

我正在为我的小应用程序生成唯一ID,但我面临一些变量范围问题。我的代码 -

function create_id()
{  
global $myusername;  
$part1 = substr($myusername, 0, -4);  
$part2 = rand (99,99999);  
$part3 = date("s");  
return $part1.$part2.$part3;  
}

$id;  
$count=0;

while($count == 1)  
{  
$id;  
$id=create_id();  
$sqlcheck = "Select * FROM ruser WHERE userId='$id';";  
$count =mysql_query($sqlcheck,$link)or die(mysql_error());  
}  


echo $id;  

我不知道我必须将哪个变量声明为global

3 个答案:

答案 0 :(得分:4)

这看起来不像是一个变量范围问题,它看起来像一个简单的变量赋值问题:

$count=0;
while($count == 1)
{

这个区块显然永远不会执行。

此外,在进行布尔检查时,请使用具有良好名称的布尔值。它看起来更干净。即:

function isUniqueUserID($userIDToCheck)
{
    $sqlcheck = "Select * FROM user WHERE userId='$userIDToCheck';";  
    $resource = mysql_query($sqlcheck)or die(mysql_error()); 
    $count = mysql_fetch_assoc($resource);
    if( count($count) > 0)
    {return false;}

    return true;
}


$userIDVerifiedUnique = false;
while(! $userIDVerifiedUnique )
{
     $userIDToCheck = create_id();
     $userIDVerifiedUnique = isUniqueUserID($userIDToCheck );
}

请注意,如果您未指定链接,mysql_query将使用上次使用的连接: http://us2.php.net/mysql_query 无需使其全球化。

答案 1 :(得分:3)

在Zak的回答中,我将用户名传递给函数而不是使用全局

function create_id($username)
{
    $part1 = substr($username, 0, -4);  
    $part2 = rand (99,99999);  
    $part3 = date("s");  
    return $part1.$part2.$part3;  
}

//$id;  no need for this
$count=1; // this bit

while($count == 1)   // not sure what's going on
{  
//$id; again same thing  no need for this
$id=create_id($myusername);

编辑:现在我想到了:您希望如何找到"Select * FROM ruser WHERE userId='$id';"?选择查询用于查找特定的内容,您的用户名是如此随机,我认为实际成功获取记录的可能性是1英镑。 edit2 哎呀,我看到重点是获得一个唯一的用户名... O_O

答案 2 :(得分:2)

除了其他人:

$count =mysql_query($sqlcheck,$link)or die(mysql_error());  

mysql_query不返回记录计数,而是返回资源。

mysql_query