Error Domain=NSCocoaErrorDomain Code=3840 "No value." UserInfo={NSDebugDescription=No value.}
我收到此错误,但我不明白为什么没有值(value)。当我在 JSONSerialization 行之前打印出用户名的值时,这些值可用。任何帮助是极大的赞赏。
这是 DBoperations php 文件
class DbOperation {
private $connect;
//Constructor
function __construct() {
require_once dirname(__FILE__). '/Constants.php';
require_once dirname(__FILE__). '/DbConnect.php';
//opening db connection
$database = new DbConnect();
$this->connect = $database->connect();
}
//This method is taking a username and password and verifying it from the database
public function userLogin($username, $pass) {
$pass = md5($pass);
$statement = $this->connect->prepare("SELECT id FROM users WHERE username = ? AND password = ?");
$statement->bind_param("ss", $username, $password);
$statement->execute();
$statement->store_result();
return $statement->num_rows > 0;
}
//After the successful login we will call this method to return the user data in an array
public function getUserByUsername($username) {
$statement = $this->connect->prepare("SELECT id, username, email FROM users WHERE username = ?");
$statement->bind_param("s", $username);
$statement->execute();
$statement->bind_result($id, $uname, $email);
$statement->fetch();
$user = array();
$user['id'] = $id;
$user['username'] = $uname;
$user['email'] = $email;
return $user;
}
//Function to create a new user
public function createUser($username, $password, $email, $name) {
if (!$this->isUserExist($username, $email)) {
$pass = md5($password);
$statement = $this->connect->prepare("INSERT INTO users (username, password, email, name) VALUES (?, ?, ?, ?)");
$statement->bind_param("sssss", $username, $pass, $email, $name);
if ($statement->execute()) {
return USER_CREATED;
} else {
return USER_NOT_CREATED;
}
} else {
return USER_ALREADY_EXIST;
}
}
private function isUserExist($username, $email) {
$statement = $this->connect->prepare("SELECT id FROM users WHERE username = ? OR email = ?");
$statement->bind_param("sss", $username, $email);
$statement->execute();
$statement->store_result();
return $statement->num_rows > 0;
}
}
这是我的注册 PHP 文件
//importing required script
require_once './includes/DbOperation.php';
$response = array();
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
if (!verifyRequiredParams(array('username', 'password', 'email', 'name'))) {
//getting values
$username = $_POST['username'];
$password = $_POST['password'];
$email = $_POST['email'];
$name = $_POST['name'];
//creating database operation on object
$database = new DbOperation();
//adding user to database
$result = $database->createUser($username, $password, $email, $name);
//making the response accordingly
if ($result == USER_CREATED) {
$response['error'] = false;
$response['message'] = 'User was created successfully';
} elseif ($result == USER_ALREADY_EXIST) {
$response['error'] = true;
$response['message'] = 'This user already Exist!';
} elseif ($result == USER_NOT_CREATED) {
$response['error'] = true;
$response['message'] = 'Some error occurred';
}
} else {
$response['error'] = true;
$response['message'] = 'Required parameters are missing';
}
} else {
$response['error'] = true;
$response['message'] = 'Invalid request';
}
//function to validate the required paramter in request
function verifyRequiredParams($required_fields) {
//Getting the request parameters
$request_params = $_REQUEST;
//Looping through all the parameters
foreach ($required_fields as $field) {
//if any required parameter is missing
if (!isset($request_params[$field]) || strlen(trim($request_params[$field])) <= 0) {
//return true
return true;
}
}
return false;
}
echo json_encode($response);
这是用户注册的快捷代码。
@objc func registerUser(button: UIButton) {
let username = userName.text!
let password = passWord.text!
let email = emailField.text!
let name = nameField.text!
//Creating parameters for post request
let parameters: Parameters = ["username": username, "password": password, "email": email, "name": name]
guard let url = URL(string: "http://localhost/TestingiOSApp/v1/register.php") else { return }
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.addValue("application/json", forHTTPHeaderField: "Content-Type")
guard let httpBody = try? JSONSerialization.data(withJSONObject: parameters, options: []) else { return }
request.httpBody = httpBody
let session = URLSession.shared
session.dataTask(with: request) { (data, response, error) in
if let response = response {
print(response)
}
if let data = data {
do {
let json = try JSONSerialization.jsonObject(with: data, options: [])
print(json)
} catch {
print(error)
}
}
}.resume()
self.view.endEditing(true)
}
最佳答案
//Function to create a new user
public function createUser($username, $password, $email, $name) {
if (!$this->isUserExist($username, $email)) {
$pass = md5($password);
$statement = $this->connect->prepare("INSERT INTO users (username, password, email, name) VALUES (?, ?, ?, ?)");
$statement->bind_param("ssss", $username, $pass, $email, $name);
if ($statement->execute()) {
return USER_CREATED;
} else {
return USER_NOT_CREATED;
}
} else {
return USER_ALREADY_EXIST;
}
}
private function isUserExist($username, $email) {
$statement = $this->connect->prepare("SELECT id FROM users WHERE username = ? OR email = ?");
$statement->bind_param("ss", $username, $email);
$statement->execute();
$statement->store_result();
return $statement->num_rows > 0;
}
两个函数在bind_param中都有额外的“s”
关于php - 我无法在 php 文件中从应用程序接收注册信息,无法将该信息插入 MSQL 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49950550/