我有一个使用 MySQL 数据库进行用户注册和登录的 Android 项目。注册部分按预期工作。登录部分没有。事情是这样的,他们都使用相同的 EXACT 查询来检查电子邮件地址是否已经存在。注册检查以确保用户在存储用户之前尚未使用该电子邮件地址。登录使用相同的查询来提取加密密码 + salt 的哈希值,以与 POSTED 密码哈希值的哈希值进行比较。当登录部分进行查询时,它至少返回一行,但似乎所有值都为空。这是查询位置的代码:
// Check if user already exists.
$sql = sprintf("SELECT * FROM users WHERE email = '%s'", mysql_real_escape_string($email));
$result = mysql_query($sql) or die(mysql_error());
$no_of_rows = mysql_num_rows($result);
if ($no_of_rows > 0) {
// User exists.
$stored_salt = $result["salt"];
$stored_password = $result["encrypted_password"];
$hash = crypt($password_hash, '$2a$10$'.$stored_salt);
// Check for password equality.
if ($stored_password == $hash) {
// User authentication details are correct.
$response["success"] = 1;
$response["uid"] = $result["unique_id"];
$response["user"]["name"] = $result["name"];
$response["user"]["email"] = $result["email"];
$response["user"]["created_at"] = $result["created_at"];
$response["user"]["updated_at"] = $result["updated_at"];
echo json_encode($response);
} else {
// User authentication failed.
// echo JSON with error = 1.
$response["error"] = 2;
$response["error_msg"] = "Incorrect password!";
echo json_encode($response);
}
} else {
// User does not exist.
$response["error"] = 1;
$response["error_msg"] = "Email address not found.";
}
返回的 JSON 对象显示“密码不正确!”,所以我让它在 JSON 对象中包含正在检查的密码,并且该密码为空。我的假设是查询没有返回结果,但它通过了 no_of_rows > 0 测试,所以它返回了一些东西。所以我在返回的 JSON 对象中包含了结果的其他部分,它们也为空。我还通过我网站上的 phpmyadmin 检查了查询(它托管在 1and1 上),查询在那里工作。有人有任何见解吗?我是 PHP 和 MySQL 的新手,所以我在这里边学习边学习,但我有点碰壁了。