查询似乎返回结果但具有空值

时间:2013-04-08 01:46:45

标签: php mysql

我有一个Android项目,它使用MySQL数据库进行用户注册和登录。注册部分按预期工作。登录部分没有。这是事情,他们都使用相同的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对象中检查的密码,并且该密码为null。我的假设是查询没有返回结果,但是它传递了no_of_rows> 0测试,所以它返回了一些东西。所以我在返回的JSON对象中包含了结果的其他部分,它们也是null。我还通过我的网站上的phpmyadmin检查了查询(它托管在1and1上),查询在那里工作。有人有任何见解吗?我是PHP和MySQL的新手,所以当我走到这里时,我正在学习,但我有点碰壁。

1 个答案:

答案 0 :(得分:2)

您需要致电mysql_fetch_assocmysql_fetch_row以获取行集中的实际行。

$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.
    $row = mysql_fetch_assoc($result);
    $salt = $row['salt'];