Php 永无止境的循环:致命错误
我的代码-Php 永无止境的循环:致命错误,php,loops,while-loop,Php,Loops,While Loop,我的代码- 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 i
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()
,反之亦然。首先,尝试将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*
没有任何意义,只要做selectuserid
,因为这就是你所关心的
我看不到任何其他原因导致isUniqueUserID()
返回false,除非您的ruser
表具有所有可能的ID。首先,尝试将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*
没有任何意义,只要做selectuserid
,因为这就是你所关心的
我看不到任何其他原因导致isUniqueUserID()
返回false,除非您的ruser
表具有所有可能的ID。如果没有从MySQL查询返回行(即$userIDToCheck
不在表中,它是唯一的),那么MySQL\u fetch\u 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);
}
如果MySQL查询没有返回任何行(即$userIDToCheck
不在表中,它是唯一的),那么MySQL\u fetch\u 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);
}
或者从ruser中选择count(*),其中userId='$userIDToCheck';”
如果$userIDToCheck
来自用户输入,请修复sql注入风险选择计数(*)
也可以工作,但我仍然会执行选择计数(userId)
以防止选择行中的所有内容。我还添加了一行代码来防止sql注入count(*)
是惯用的sql,除非您的DBMS出现严重错误,否则永远不需要读取整行。它应该是首选形式。@zinglon很抱歉我不知道。谢谢或者从ruser中选择count(*),其中userId='$userIDToCheck';”如果$userIDToCheck
来自用户输入,请修复sql注入风险选择计数(*)
也可以工作,但我仍然会执行选择计数(userId)
以防止选择行中的所有内容。我还添加了一行代码来防止sql注入count(*)
是惯用的sql,除非您的DBMS出现严重错误,否则永远不需要读取整行。它应该是首选形式。@zinglon很抱歉我不知道。谢谢当mysql_fetch_assoc()没有找到要返回的行时,它返回false。count(false)将返回1,因为从技术上讲false是1个元素。iUniqueUserId函数需要按照下面的答案进行重构。请接受您的问题的答案,并请投票选出好的答案(如果不是在网站上,至少是您自己的问题)。重复?当mysql_fetch_assoc()没有找到要返回的行时,它返回false。count(false)将返回1,因为从技术上讲false是1个元素。iUniqueUserId函数需要按照下面的答案进行重构。请接受您的问题的答案,并请投票选出好的答案(如果不是在网站上,至少是您自己的问题)。重复?这就是我所知道的,然后我必须做出什么改变??这是我的问题。@Piyus,请看我答案中的函数。。。虽然我注意到你已经接受了另一个。另外,你的Q没有问需要做什么改变。这就是我知道的,然后我必须做什么改变??那是我的Q。@Piyush,请看我答案中的函数。。。虽然我注意到你已经接受了另一个。另外,你的Q没有问需要做什么改变。