PHP脚本,即使更新了DB,也会使用SQL查询返回false

时间:2015-06-03 02:19:59

标签: php mysql mysqli

我遇到了一个简单的PHP脚本,这是我的用户注册系统的一部分。

在注册表单中输入用户信息后,我调用以下PHP:

if ($db->isUserExisted($email)) {
            // user is already existed - error response
            $response["error"] = TRUE;
            $response["error_msg"] = "User already existed";
            echo json_encode($response);
        } else {
            // store user
            $user = $db->storeUser($name, $email, $password);
            if ($user != false) {
                // user stored successfully
                $response["error"] = FALSE;
                $response["userID"] = $user["unique_id"];
                $response["user"]["name"] = $user["name"];
                $response["user"]["email"] = $user["email"];
                $response["user"]["created_at"] = $user["created_at"];
                $response["user"]["updated_at"] = $user["updated_at"];
                echo json_encode($response); 
            } else {
                // user failed to store
                $response["error"] = TRUE;
                $response["error_msg"] = "Error occured in Registration";
                echo json_encode($response);
            }
        }

现在,这是storeUser函数,我通过对DB_Functions类的对象引用访问:

public function storeUser($name, $email, $password) {
        $uuid = uniqid('', true);
        $hash = $this->hashSSHA($password);
        $encrypted_password = $hash["encrypted"]; // encrypted password
        $salt = $hash["salt"]; // salt
        $grade = "novice";
        $eloscore = 1200;
        $result = mysql_query("INSERT INTO Chessmates.User_Accounts (unique_id, name, email, Grade, encrypted_password, ELOscore, salt, created_at) VALUES('$uuid', '$name', '$email', '$grade', '$encrypted_password', $eloscore, '$salt', NOW())");
        // check for successful store
        if ($result != false) {
            // get user details 
            $uid = mysql_insert_id(); // last inserted id 
            $result = mysql_query("SELECT * FROM users WHERE uid = $uid");
            // return user details
            return mysql_fetch_array($result);
        } else {
            return false;
        }
    }

你会注意到,如果我的storeUser函数返回false - 这是在mysql_query返回false的情况下发生的 - 那么返回给我的Android应用程序的是一个包含error_msg“注册时出错”的数组。

这正是我通过点击我的应用上的“注册”按钮启动整个注册级联时看到的消息。

但是,我的数据库正在正确更新!

我想我已经把问题缩小到mysql_query返回false,但如果查询成功,怎么可能呢?

1 个答案:

答案 0 :(得分:1)

也许您的选择查询实际上是问题。

您正在插入Chessmates.User_Accounts,但您正在从users中选择。

$result = mysql_query("SELECT * FROM users WHERE uid = $uid");