我的代码 -
function create_id()
{
//global $myusername;
$part1 = substr("Piyush", 0, -4);
$part2 = rand (99,99999);
$part3 = date("s");
return $part1.$part2.$part3;
}
echo create_id(); //this is printing fine.
function isUniqueUserID($userIDToCheck)
{
$sqlcheck = "Select * FROM ruser 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 );
}
循环只是从while循环继续运行到函数IsUniqueUser()
,反之亦然。 ????
答案 0 :(得分:2)
如果MySQL查询没有返回任何行(即$userIDToCheck
不在表中,则它是唯一的),然后mysql_fetch_assoc
将返回FALSE
。发生这种情况时,count(FALSE)
会返回1
(一个)!由于该值大于零,因此函数返回FALSE
。
简而言之,如果返回一行(字符串不唯一),则isUniqueUserID
函数返回FALSE
;如果没有返回行(字符串是唯一的),它仍然会返回FALSE
。
检查数据库表的一个简单的新函数可能类似于以下内容......
function isUniqueUserID($userIDToCheck)
{
$userIDToCheck = mysql_real_escape_string($userIDToCheck); // Assume not already escaped
$sqlcheck = "SELECT 1 FROM ruser WHERE userId='$userIDToCheck' LIMIT 1";
$resource = mysql_query($sqlcheck) or die(mysql_error());
return (bool) mysql_num_rows($resource);
}
答案 1 :(得分:1)
首先,尝试将isUniqueUserID()
功能更改为此
function isUniqueUserID($userIDToCheck)
{
$userIDToCheck = mysql_real_escape_string($userIDToCheck); //prevent SQL injection
$sqlcheck = "Select userId FROM ruser WHERE userId='$userIDToCheck';";
$resource = mysql_query($sqlcheck)or die(mysql_error());
$count = mysql_num_rows($resource);
return ($count > 0) ? false : true;
返回关联数组只是为了计算其中的行数是没有意义的。在计算SELECT *
时,做SELECT userId
是没有意义的,因为这就是你所关心的。
我没有看到isUniqueUserID()
返回false的任何其他原因,除非您的ruser
表具有所有可能的ID。