现在,$ num只是数据库搜索中的数据行数。有时它会是0. $ procrastinate是一个函数参数。
if ($num==0) {
return "Do not appear to be registered. Please check your email input again.";
break 1;
} else { // there is an entry. check for consistency
$procrastinateDB = mysql_result($result,0,'procrastinate');
if ($procrastinate != $procrastinateDB) {
return "Answer to your procrastination question is incorrect. Please try again!";
break 2;
}
else {
$username = mysql_result($result,0,'usrname');
$passwd = mysql_result($result,0,'passwd');
return array($username, $passwd, $num);
break 2;
}
}
我不理解的是,即使$ num = 0,仍会返回一个数组,其中$ usersname ='D',$ passwd ='o'和$ num =''。很明显,它是第一个返回的语句,只是按顺序将这些变量分配给第一个返回句子中的每个字符。
如何阻止这种情况?如果没有数据库条目,我不希望$ username,$ passwd,$ num包含任何值。
答案 0 :(得分:3)
有关您的代码的一些评论:
break
之后您无需return
。break
不适用于PHP中的if
。else
,则无需执行return
。我对您的代码进行了一些更改,以使其更加明显,同时也降低了圈复杂度。可能这有助于您更容易地发现错误:
function unnamed(/* ... unknown parameters ... */)
{
/* ... some code ... */
if ($num==0)
{
return "Do not appear to be registered. Please check your email input again.";
}
// there is an entry. check for consistency
$procrastinateDB = mysql_result($result,0,'procrastinate');
if ($procrastinate != $procrastinateDB)
{
return "Answer to your procrastination question is incorrect. Please try again!";
}
$username = mysql_result($result,0,'usrname');
$passwd = mysql_result($result,0,'passwd');
return array($username, $passwd, $num);
}
您的函数返回字符串或数组btw。如果你没有检查返回类型并假设它是一个数组,你将触发子串访问(见documented on the string manual page):
$string = 'ABC';
echo $string[0]; // A
echo $string[2]; // C
让函数返回一种类型而不是多种类型通常会更好。然而,这取决于您的设计和编码风格,因此我只能提出建议,例如返回包含状态消息的对象,状态代码(成功/失败)和 - 如果可用 - 您要返回的数据数组。然而,这取决于你想要/需要什么。您也可以使用is_array
检查返回类型。
答案 1 :(得分:1)
仍会返回一个数组,其中$ usersname ='D',$ passwd ='o'和$ num =''。
当$num
为0时,您将返回字符串:
似乎没有注册。请再次检查您的电子邮件输入。
在PHP中,您可以访问像数组这样的字符串。所以,我的猜测是你没有检查你是否返回了一个字符串或一个数组,并做了类似的事情:
list($username, $passwd, $num) = yourFunction();
由于字符串可以像数组一样被加入,$username
将是D
,$password
将是o
,而$num
将是一个空格,因为那些是前三个角色。
我建议您在访问该值之前使用is_array
,以确保您知道自己得到了什么。
$ret = yourFunction();
if(is_array($ret)){
list($username, $passwd, $num) = $ret;
}
else{
// Something else
}