我遇到了一个简单的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,但如果查询成功,怎么可能呢?
答案 0 :(得分:1)
也许您的选择查询实际上是问题。
您正在插入Chessmates.User_Accounts
,但您正在从users
中选择。
$result = mysql_query("SELECT * FROM users WHERE uid = $uid");