PHP数组返回错误的值

时间:2011-11-18 17:12:45

标签: php arrays if-statement return return-value

现在,$ 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包含任何值。

2 个答案:

答案 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
}