在数字前使用{%2B)而不是(+)之间的区别是什么?

时间:2018-08-12 14:41:27

标签: php android mysql api retrofit2

我正在基于教程的api上工作,该教程正在从用户获取令牌以识别该用户是否为管理员。

所以这只是一个问题,

+1xxx-xxxx-xxx

%2B1xxx-xxxx-xxx

当我测试了我的api时,如果我在isServerToken中输入了错误的数据,则返回null;如果我使用正确的一个,它将返回正确的值。但是,如果我使用+而不是[%2B],则会出现此错误:

<br />
<b>Notice</b>:  Undefined variable: token in <b>/h**e/m***/pu**tml/***/db_functions.php</b> on line <b>389</b><br />
null

我将在下面评论389行

无论我对isServerToken使用正确还是错误的输入。这将是最主要的错误。

我问这个问题是因为我从android中收到有关

的错误
java.langillegalStateException: Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 1 column 2 path $

所以我正在考虑使此错误发生的各种可能性。这是PHP API的代码。在教程中,讲师使用了get_result,但我将其更改为bind_result,因为它不能在我的在线主机上使用。

以下是代码:

// Instructer Code
public function getToken($phone,$isServerToken)
{
    $stmt = $this->conn->prepare("SELECT * FROM `token` WHERE phone=? AND isServerToken=?") or die ($this->conn->error);
    $stmt->bind_param("ss",$phone,$isServerToken);
    $result = $stmt->execute();
    $token = $stmt->get_result()->fetch_assoc();
    $stmt->close();
    return $token;
}

// What i've changed to Bind
public function getToken($phone,$isServerToken)
{
    $stmt = $this->conn->prepare("SELECT phone, token, isServerToken FROM `token` WHERE phone=? AND isServerToken=?") or die ($this->conn->error);
    $stmt->bind_param("ss",$phone,$isServerToken);
    $result = $stmt->execute();
    $stmt->bind_result($arr['phone'], $arr['token'], $arr['isServerToken']);
    while ($stmt->fetch())
    {
        $token[] = $arr;
    }
    $stmt->close();
    return $token; => This is where `Undefined variable: token in` happen.
}

从这部分调用应用程序:

//Only instructor code, i didn't changed anything this part
if(isset($_POST['phone']) && isset($_POST['isServerToken']))
{
$userPhone = $_POST['phone'];
$isServerToken = $_POST['isServerToken'];

$token = $db->getToken($userPhone,$isServerToken);

echo json_encode($token);


}
else{
$response = "Required parameter (phone , isServerToken) is missing!";
echo json_encode($response);
}

我想确保何时使用带有+ xxxx-xxxx-xxx编号的寄存器是否使我的api出现顶部错误或没有错误,因为正如我说的那样,它与%2Bxxxx-xxxx-xxx可以正常工作。

另一个数字也用+保存在数据库中。

当我基于建议建立此行时,现在+出现了相反的情况,而2%B将为空。     $ token = $ db-> getToken(urlencode($ userPhone),$ isServerToken);

谢谢

1 个答案:

答案 0 :(得分:1)

在第二个函数声明Conv2DTranspose中,如果未循环getToken构造(如声明$token,则将永远不会创建变量while。在循环内在线)。

因此,可能的结果是变量$token在返回$token时不存在(这就是您所遇到的)。换句话说,在您的情况下,没有任何结果被循环。

也:加号在JSON中不是很好的匹配: https://stackoverflow.com/a/1374456/5682311

在将电话号码(或任何值)解析为$token之前在电话号码上使用php的urlencode函数,听起来像是解决方案(它将json_encode的符号转换为+

编辑:

%2B