我目前正在关注使用Slim创建api的this tutorial。 所以我尝试使用相同的代码创建一个注册系统。
这是我在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);
结果总是这个
{ “错误”:是的, “message”:“糟糕!注册时出错” }
我的查询参数是
username = abc email = abc@gmail.com密码= 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);
我在做你提到的事情吗?
因为我收到此错误
答案 0 :(得分:0)
Status
列类型为int
,因此请尝试以这种方式绑定参数:
$stmt->bind_param("ssssi", $username, $email, $password_hash, $api_key, $status);
答案 1 :(得分:0)
最近我刚刚解决了这个问题。我只是犯了一个非常愚蠢的错误。 事实上,这段代码没有任何问题,但我只需要在“数据表格”中提出请求即可。部分而不是地址'节
这样做之后,我就解决了我的问题 我是初学者,我犯了一个愚蠢的错误,希望可以为下一个遵循这个有用教程的人解决同样的问题