Slim micro framework,为什么我无法将记录插入数据库?
Slim micro framework,why I can't insert the record to the database?
我目前正在关注 this tutorial,其中关于使用 Slim 创建 api。
所以我尝试使用相同的代码制作一个注册系统。
这里是我的register函数里面的函数DBHandler.php
public function createUser ($username,$email,$password){
require_once 'PassHash.php';
//check whether email exist or not
if(!$this->isUserEmailExisted($email)) {
//hash the password
$password_hash = PassHash::hash($password);
//generate api_key
$api_key = $this->generateApiKey();
//insert query
$stmt = $this->conn->prepare("INSERT INTO users(username,email,password_hash,api_key,status)VALUES(:username,:email,:password,:api_key,1)");
$stmt->bind_param("ssss",$username,$email,$password_hash,$api_key);
$result = $stmt->execute();
$stmt->close();
if ($result) {
return USER_CREATED_SUCCESSFULLY;
} else {
return USER_CREATE_FAILED;
}
} else{
return USER_ALREADY_EXISTED;
}
}
我只是检查了我的插入查询,但我不知道这是什么问题。
//insert query
$stmt = $this->conn->prepare("INSERT INTO users(username,email,password_hash,api_key,status)VALUES(:username,:email,:password,:api_key,1)");
$stmt->bind_param("ssss",$username,$email,$password_hash,$api_key);
结果总是这样
{
"error": true,
"message": "Oops! An error occurred while registering"
}
我的查询参数是
username=abc email=abc@gmail.com password=123456
这应该是注册成功的结果。但是一直出现插入数据库失败的错误结果。
这是我 index.php
中的函数调用
$app->post('/register', function() use ($app) {
// check for required params
verifyRequiredParams(array('username', 'email', 'password'));
$response = array();
// reading post params
$username = $app->request->post('username');
$email = $app->request->post('email');
$password = $app->request->post('password');
// validating email address
validateEmail($email);
$db = new DbHandler();
$res = $db->createUser($username, $email, $password);
if ($res == USER_CREATED_SUCCESSFULLY) {
$response["error"] = false;
$response["message"] = "You are successfully registered";
echoRespnse(201, $response);
} else if ($res == USER_CREATE_FAILED) {
$response["error"] = true;
$response["message"] = "Oops! An error occurred while registereing";
echoRespnse(200, $response);
} else if ($res == USER_ALREADY_EXISTED) {
$response["error"] = true;
$response["message"] = "Sorry, this email already existed";
echoRespnse(200, $response);
}
});
这是我的数据库
CREATE TABLE `users` (
`id` int(11) NOT NULL,
`username` varchar(255) DEFAULT NULL,
`email` varchar(255) NOT NULL,
`password_hash` text NOT NULL,
`api_key` varchar(32) NOT NULL,
`status` int(1) NOT NULL DEFAULT '1',
`created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COMMENT='all user data ';
我只是尽力检查所有期望,并搜索所有关于 Slim 的问题,但我的知识和经验仍然非常有限,所以我仍然不明白我的错误,任何指南都非常感谢。
提前致谢。
我尝试在查询中包含 created_at
并在语句中包含 $status=1
和 bind_param,但输出仍然相同
// Generating API key
$api_key = $this->generateApiKey();
$status = 1;
// insert query
$stmt = $this->conn->prepare("INSERT INTO users(username, email, password_hash, api_key, status,created_at) values(?, ?, ?, ?, ?,NOW())");
$stmt->bind_param("sssss", $username, $email, $password_hash, $api_key,$status);
$result = $stmt->execute();
$stmt->close();
@Dusan Jovanov,我修改了我的代码,你看我做对了吗??
在我的 createUser()
方法中
// Check for successful insertion
if ($result) {
// User successfully inserted
return USER_CREATED_SUCCESSFULLY;
} else {
$error = $stmt->error_list;
// Failed to create user
return $error;
}
} else {
// User with same email already existed in the db
return USER_ALREADY_EXISTED;
}
在'/register'回调
else if ($res == $error) {
$response["error"] = true;
$response["message"] =$error;
echoRespnse(200, $response);
我在做你说的吗?
因为我收到这个错误
抱歉,因为我还是新手 php..还在学习中..谢谢帮助
Status
列类型是 int
所以尝试以这种方式绑定参数:
$stmt->bind_param("ssssi", $username, $email, $password_hash, $api_key, $status);
最近我刚刚解决了这个problem.I只是犯了一个很愚蠢的错误。
事实上这段代码没有任何问题,但我只需要在 'Data form' 部分而不是 'address' 部分
提出请求
而不是在这里进行查询,
我应该在这里查询,Advance Rest Client 中的 'Data from' 部分
这样做之后,我的问题就解决了
我是初学者,我犯了一个愚蠢的错误,希望可以为下一个遵循这个有用教程的人解决同样的问题
我目前正在关注 this tutorial,其中关于使用 Slim 创建 api。 所以我尝试使用相同的代码制作一个注册系统。
这里是我的register函数里面的函数DBHandler.php
public function createUser ($username,$email,$password){
require_once 'PassHash.php';
//check whether email exist or not
if(!$this->isUserEmailExisted($email)) {
//hash the password
$password_hash = PassHash::hash($password);
//generate api_key
$api_key = $this->generateApiKey();
//insert query
$stmt = $this->conn->prepare("INSERT INTO users(username,email,password_hash,api_key,status)VALUES(:username,:email,:password,:api_key,1)");
$stmt->bind_param("ssss",$username,$email,$password_hash,$api_key);
$result = $stmt->execute();
$stmt->close();
if ($result) {
return USER_CREATED_SUCCESSFULLY;
} else {
return USER_CREATE_FAILED;
}
} else{
return USER_ALREADY_EXISTED;
}
}
我只是检查了我的插入查询,但我不知道这是什么问题。
//insert query
$stmt = $this->conn->prepare("INSERT INTO users(username,email,password_hash,api_key,status)VALUES(:username,:email,:password,:api_key,1)");
$stmt->bind_param("ssss",$username,$email,$password_hash,$api_key);
结果总是这样
{ "error": true, "message": "Oops! An error occurred while registering" }
我的查询参数是
username=abc email=abc@gmail.com password=123456
这应该是注册成功的结果。但是一直出现插入数据库失败的错误结果。
这是我 index.php
中的函数调用$app->post('/register', function() use ($app) {
// check for required params
verifyRequiredParams(array('username', 'email', 'password'));
$response = array();
// reading post params
$username = $app->request->post('username');
$email = $app->request->post('email');
$password = $app->request->post('password');
// validating email address
validateEmail($email);
$db = new DbHandler();
$res = $db->createUser($username, $email, $password);
if ($res == USER_CREATED_SUCCESSFULLY) {
$response["error"] = false;
$response["message"] = "You are successfully registered";
echoRespnse(201, $response);
} else if ($res == USER_CREATE_FAILED) {
$response["error"] = true;
$response["message"] = "Oops! An error occurred while registereing";
echoRespnse(200, $response);
} else if ($res == USER_ALREADY_EXISTED) {
$response["error"] = true;
$response["message"] = "Sorry, this email already existed";
echoRespnse(200, $response);
}
});
这是我的数据库
CREATE TABLE `users` (
`id` int(11) NOT NULL,
`username` varchar(255) DEFAULT NULL,
`email` varchar(255) NOT NULL,
`password_hash` text NOT NULL,
`api_key` varchar(32) NOT NULL,
`status` int(1) NOT NULL DEFAULT '1',
`created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COMMENT='all user data ';
我只是尽力检查所有期望,并搜索所有关于 Slim 的问题,但我的知识和经验仍然非常有限,所以我仍然不明白我的错误,任何指南都非常感谢。
提前致谢。
我尝试在查询中包含 created_at
并在语句中包含 $status=1
和 bind_param,但输出仍然相同
// Generating API key
$api_key = $this->generateApiKey();
$status = 1;
// insert query
$stmt = $this->conn->prepare("INSERT INTO users(username, email, password_hash, api_key, status,created_at) values(?, ?, ?, ?, ?,NOW())");
$stmt->bind_param("sssss", $username, $email, $password_hash, $api_key,$status);
$result = $stmt->execute();
$stmt->close();
@Dusan Jovanov,我修改了我的代码,你看我做对了吗??
在我的 createUser()
方法中
// Check for successful insertion
if ($result) {
// User successfully inserted
return USER_CREATED_SUCCESSFULLY;
} else {
$error = $stmt->error_list;
// Failed to create user
return $error;
}
} else {
// User with same email already existed in the db
return USER_ALREADY_EXISTED;
}
在'/register'回调
else if ($res == $error) {
$response["error"] = true;
$response["message"] =$error;
echoRespnse(200, $response);
我在做你说的吗?
因为我收到这个错误
Status
列类型是 int
所以尝试以这种方式绑定参数:
$stmt->bind_param("ssssi", $username, $email, $password_hash, $api_key, $status);
最近我刚刚解决了这个problem.I只是犯了一个很愚蠢的错误。 事实上这段代码没有任何问题,但我只需要在 'Data form' 部分而不是 'address' 部分
提出请求而不是在这里进行查询,
我应该在这里查询,Advance Rest Client 中的 'Data from' 部分
这样做之后,我的问题就解决了 我是初学者,我犯了一个愚蠢的错误,希望可以为下一个遵循这个有用教程的人解决同样的问题