[英]mysqli in PHP - bind_result always returning null
我的PHP代码中包含以下函数/方法,我想根据密码或令牌和电子邮件检查一些用户内容。
function login($email, $password, $token) {
if (isset($email)) {
if (isset($password) && strlen($password) > 0) {
$stmt = $this->con->prepare("SELECT users.user_id, logins.email, logins.token, users.firstname, users.lastname, users.username
FROM users
INNER JOIN logins
ON users.login_id = logins.login_id
WHERE logins.email=? AND logins.password=?");
$stmt->bind_param("ss", $email, $password);
} elseif ($token && strlen($token) > 0) {
$stmt = $this->con->prepare("SELECT users.user_id, logins.email, logins.token, users.firstname, users.lastname, users.username
FROM users
INNER JOIN logins
ON users.login_id = logins.login_id
WHERE logins.email=? AND logins.token=?");
$stmt->bind_param("ss", $email, $token);
} else {
return $this->error_login_failure;
}
$stmt->execute();
$stmt->store_result();
$stmt->bind_result($rUserId, $rEmail, $rToken, $rFirstname, $rLastname, $rUsername);
$stmt->fetch();
if ($rUserId != null || strlen($rUserId) > 0) {
$stmt->close();
$newToken = $this->insertNewToken($email, $password, $rToken);
if ($newToken == null) {
return $this->error_login_failure;
} else {
$returnValues = array();
$returnValues['userId'] = $rUserId;
$returnValues['email'] = $rEmail;
$returnValues['token'] = $rToken;
$returnValues['firstname'] = $rFirstname;
$returnValues['lastname'] = $rLastname;
$returnValues['username'] = $rUsername;
return $returnValues;
}
} else {
$stmt->close();
return $this->error_login_failure;
}
} else {
return $this->error_login_failure;
}
}
问题是,当我传递令牌(不为null)时,我什么也得不到。 我已经对其进行调试,发现所有输入参数都是正确的,并且代码到达“ elseif($ token && strlen($ token)> 0){”。 但是,当我尝试获取返回的数据时,什么也没有返回。 如果我输入密码,则不会发生这种情况,只有当密码尝试使用令牌的第二个“ if”时才发生。
如果我将带有令牌的第二个SQL查询作为参数并在终端中手动运行它,则它也可以工作。 我似乎无法找出问题所在。
任何帮助将不胜感激。
我看到的密码和令牌之间的唯一区别是isset命令。 尝试像下面一样添加它,看看是否可以解决。 除此之外,我将验证列名是否正确。
function login($email, $password, $token) {
if (isset($email)) {
if (isset($password) && strlen($password) > 0) {
$stmt = $this->con->prepare("SELECT users.user_id, logins.email, logins.token, users.firstname, users.lastname, users.username
FROM users
INNER JOIN logins
ON users.login_id = logins.login_id
WHERE logins.email=? AND logins.password=?");
$stmt->bind_param("ss", $email, $password);
} elseif (isset($token) && strlen($token) > 0) {
$stmt = $this->con->prepare("SELECT users.user_id, logins.email, logins.token, users.firstname, users.lastname, users.username
FROM users
INNER JOIN logins
ON users.login_id = logins.login_id
WHERE logins.email=? AND logins.token=?");
$stmt->bind_param("ss", $email, $token);
} else {
return $this->error_login_failure;
}
$stmt->execute();
$stmt->store_result();
$stmt->bind_result($rUserId, $rEmail, $rToken, $rFirstname, $rLastname, $rUsername);
$stmt->fetch();
if ($rUserId != null || strlen($rUserId) > 0) {
$stmt->close();
$newToken = $this->insertNewToken($email, $password, $rToken);
if ($newToken == null) {
return $this->error_login_failure;
} else {
$returnValues = array();
$returnValues['userId'] = $rUserId;
$returnValues['email'] = $rEmail;
$returnValues['token'] = $rToken;
$returnValues['firstname'] = $rFirstname;
$returnValues['lastname'] = $rLastname;
$returnValues['username'] = $rUsername;
return $returnValues;
}
} else {
$stmt->close();
return $this->error_login_failure;
}
} else {
return $this->error_login_failure;
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.