超薄的微框架,为什么我不能将记录插入数据库?

时间:2017-01-25 06:31:24

标签: php mysql api slim

我目前正在关注使用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);

我在做你提到的事情吗?

因为我收到此错误

error after following Dusan Jovanov 对不起因为我还是新的php..still learning..thanks for help

2 个答案:

答案 0 :(得分:0)

Status列类型为int,因此请尝试以这种方式绑定参数:

$stmt->bind_param("ssssi", $username, $email, $password_hash, $api_key, $status);

答案 1 :(得分:0)

最近我刚刚解决了这个问题。我只是犯了一个非常愚蠢的错误。 事实上,这段代码没有任何问题,但我只需要在“数据表格”中提出请求即可。部分而不是地址'节

而不是在这里进行查询, not insert here

我应该在这里查询来自'的数据。部分提前休息客户   should make the query here

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

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