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' 部分

这样做之后,我的问题就解决了 我是初学者,我犯了一个愚蠢的错误,希望可以为下一个遵循这个有用教程的人解决同样的问题

http://www.androidhive.info/2014/01/how-to-create-rest-api-for-android-app-using-php-slim-and-mysql-day-12-2/