我正在为我的小应用程序生成唯一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
答案 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不返回记录计数,而是返回资源。