为什么用bind_result重写代码后,php api为什么返回null?

时间:2018-08-12 16:40:46

标签: php mysql api null

我正在使用此PHP API(用于Android应用)获取令牌,以基于服务器和用户[电话]发送通知。问题是我在应用程序中出现错误,并且我的api的仅此部分出现错误。哪个错误

<br />
<b>Notice</b>:  Undefined variable: token in <b>/home/meskand1/public_html/pasargad-drinkshop/db_functions.php</b> on line <b>390</b><br />
null

我在下面注释了第390行和功能代码。

代码与get_Result和fetch_assoc一起正常工作,但是由于在线主机不支持mysqlnd,所以我不得不更改它。谁能解释错误发生在哪里以及为什么发生?在具有get_Result讲师的教程中返回了$ token,现在在我的代码中这会出错。

这是函数中的代码:

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($a,$b,$c);
   while ($stmt->fetch()){
       $token[] = ['phone' => $a, 'token' => $b, 'isServerToken' => $c];
   }
   $stmt->close();
   return $token; // => This is line 390
}

致电

if(isset($_POST['phone']) && isset($_POST['isServerToken'])){
   $userPhone = $_POST['phone'];
   $isServerToken = $_POST['isServerToken'];

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

   echo json_encode($token);

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

1 个答案:

答案 0 :(得分:1)

如果您的SQL不匹配任何数据,则$token是未定义的,因为它仅在循环中设置。您至少应该在循环之前将其初始化,以防万一...

$stmt->bind_result($a,$b,$c);
$token = array();    // Initialise
while ($stmt->fetch())
{
    $token[] = ['phone' => $a, 'token' => $b, 'isServerToken' => $c];
}
$stmt->close();
return $token;