Mysql外部php api列问题-无法执行()

Mysql外部php api列问题-无法执行(),php,mysql,ajax,api,cross-domain,Php,Mysql,Ajax,Api,Cross Domain,我已经使用php slim框架创建了一个API,它具有login.register.task添加/更新/删除功能 该模块在实时服务器上运行良好。但是,当我尝试从另一台服务器或本地主机登录/注册调用api时,工作正常,但在创建特定的用户任务时,它会给出以下错误,该任务会创建task\u id&user\u id.task-方法post错误为 execute() failed: Column 'user_id' cannot be null 我的api url是 'http://creativep

我已经使用php slim框架创建了一个API,它具有login.register.task添加/更新/删除功能

该模块在实时服务器上运行良好。但是,当我尝试从另一台服务器或本地主机登录/注册调用api时,工作正常,但在创建特定的用户任务时,它会给出以下错误,该任务会创建task\u id&user\u id.task-方法post错误为

execute() failed: Column 'user_id' cannot be null
我的api url是

'http://creativepixel.co.in/task_manager_angular/api2/v1/';
&任务方法get response为null

{"error":false,"tasks":[]}
我的mysql表结构如下:

user = id,name,email,password,api_key
task = id, task
user_tasks = id,user_id,task_id
这里是我的html ajax调用(在使用textfield创建任务后,在提交时我重新加载页面,页面在textfield下面加载所有任务,但在创建任务后,第三个表“user_tasks”变为空,并给出上述错误)

我的电话在这里

//Creating new task
 //@param String $user_id user id to whom task belongs to
 //@param String $task task text
public function createTask($user_id, $task) {

    $stmt = $this->conn->prepare("INSERT INTO tasks(task) VALUES(?)");
    $stmt->bind_param("s", $task);
    $result = $stmt->execute();
    $stmt->close();

    if ($result) {
        // task row created
        // now assign the task to user
        $new_task_id = $this->conn->insert_id;
        $res = $this->createUserTask($user_id, $new_task_id);
        if ($res) {
            // task created successfully
            return $new_task_id;
        } else {
            // task failed to create
            return NULL;
        }
    } else {
        // task failed to create
        return NULL;
    }
}

//Function to assign a task to user
 //@param String $user_id id of the user
 //@param String $task_id id of the task

public function createUserTask($user_id, $task_id) {
$stmt = $this->conn->prepare("INSERT INTO user_tasks(user_id, task_id) values(?, ?)");
$stmt->bind_param("ii", $user_id, $task_id);
    $result = $stmt->execute();

    if (false === $result) {
        die('execute() failed: ' . htmlspecialchars($stmt->error));
    }
    $stmt->close();
    return $result;
}
下面是我的php api调用函数

<?php

header('Access-Control-Allow-Origin: *');

require_once '../include/DbHandler.php';
require_once '../include/PassHash.php';
require '.././libs/Slim/Slim.php';

\Slim\Slim::registerAutoloader();

$app = new \Slim\Slim();
// User id from db - Global Variable
$user_id = NULL;

function authenticate(\Slim\Route $route) {
    // Getting request headers
    $headers = apache_request_headers();
    $response = array();
    $app = \Slim\Slim::getInstance();
    // Verifying authorization Header
    $db = new DbHandler();
    $session = $db->getSession();
    $email = $session['email'];
    //if (isset($headers['authorization'])) {

        if (!$db->isValidApiKey($email)) {
            // api key is not present in users table
            $response["error"] = true;
            $response["message"] = "Access Denied. Invalid Api key";
            echoRespnse(401, $response);
            $app->stop();
        } else {
            global $user_id;

       // get user primary key id
            $user_id = $db->getUserId($email);

        }

}


// Creating new task in db
 // method POST
 // params - name
 // url - /tasks/

$app->post('/tasks', 'authenticate', function() use ($app) {
            // check for required params
            verifyRequiredParams(array('task'));

            $response = array();
            $task = $app->request->post('task');

            global $user_id;
            $db = new DbHandler();

            // creating new task
            $task_id = $db->createTask($user_id, $task);


            if ($task_id != NULL) {
                $response["error"] = false;
                $response["message"] = "Task created successfully";
                $response["task_id"] = $task_id;
                $response["task"] = $task;
                echoRespnse(201, $response);
            } else {
                $response["error"] = true;
                $response["message"] = "Failed to create task. Please try again";
                echoRespnse(200, $response);
            }            
        });


// Verifying required params posted or not

function verifyRequiredParams($required_fields) {
    $error = false;
    $error_fields = "";
    $request_params = array();
    $request_params = $_REQUEST;
    // Handling PUT request params
    if ($_SERVER['REQUEST_METHOD'] == 'PUT') {
        $app = \Slim\Slim::getInstance();
        parse_str($app->request()->getBody(), $request_params);
    }
    foreach ($required_fields as $field) {
        if (!isset($request_params[$field]) || strlen(trim($request_params[$field])) <= 0) {
            $error = true;
            $error_fields .= $field . ', ';
        }
    }

    if ($error) {
        // Required field(s) are missing or empty
        // echo error json and stop the app
        $response = array();
        $app = \Slim\Slim::getInstance();
        $response["error"] = true;
        $response["message"] = 'Required field(s) ' . substr($error_fields, 0, -2) . ' is missing or empty';
        echoRespnse(400, $response);
        $app->stop();
    }
}

请检查,您可以使用假id注册并分析代码…

用户id
不能为空。下一个问题。(您没有提供实际设置的
$user\u id
位置)。@JonStirling我已经更新了postHmm底部的代码,我看到的最明显的事情是
返回NULL
when execute失败,但在获取之前也不测试是否返回了任何结果,如果没有匹配的行,则获取将返回
null
。使用
var\u dump
查看空值的来源。然后再写回去。我很奇怪代码是一样的。在mysql上更新用户电子邮件/密码/名称。任务也会插入“任务”列中,但“用户任务”有什么问题(我尝试了var_dump($user_id,$task_id);结果为NULL int(92)execute()失败:同一服务器上的列'user_id'不能为NULL var_dumb result为int(18)int(94)
<?php

header('Access-Control-Allow-Origin: *');

require_once '../include/DbHandler.php';
require_once '../include/PassHash.php';
require '.././libs/Slim/Slim.php';

\Slim\Slim::registerAutoloader();

$app = new \Slim\Slim();
// User id from db - Global Variable
$user_id = NULL;

function authenticate(\Slim\Route $route) {
    // Getting request headers
    $headers = apache_request_headers();
    $response = array();
    $app = \Slim\Slim::getInstance();
    // Verifying authorization Header
    $db = new DbHandler();
    $session = $db->getSession();
    $email = $session['email'];
    //if (isset($headers['authorization'])) {

        if (!$db->isValidApiKey($email)) {
            // api key is not present in users table
            $response["error"] = true;
            $response["message"] = "Access Denied. Invalid Api key";
            echoRespnse(401, $response);
            $app->stop();
        } else {
            global $user_id;

       // get user primary key id
            $user_id = $db->getUserId($email);

        }

}


// Creating new task in db
 // method POST
 // params - name
 // url - /tasks/

$app->post('/tasks', 'authenticate', function() use ($app) {
            // check for required params
            verifyRequiredParams(array('task'));

            $response = array();
            $task = $app->request->post('task');

            global $user_id;
            $db = new DbHandler();

            // creating new task
            $task_id = $db->createTask($user_id, $task);


            if ($task_id != NULL) {
                $response["error"] = false;
                $response["message"] = "Task created successfully";
                $response["task_id"] = $task_id;
                $response["task"] = $task;
                echoRespnse(201, $response);
            } else {
                $response["error"] = true;
                $response["message"] = "Failed to create task. Please try again";
                echoRespnse(200, $response);
            }            
        });


// Verifying required params posted or not

function verifyRequiredParams($required_fields) {
    $error = false;
    $error_fields = "";
    $request_params = array();
    $request_params = $_REQUEST;
    // Handling PUT request params
    if ($_SERVER['REQUEST_METHOD'] == 'PUT') {
        $app = \Slim\Slim::getInstance();
        parse_str($app->request()->getBody(), $request_params);
    }
    foreach ($required_fields as $field) {
        if (!isset($request_params[$field]) || strlen(trim($request_params[$field])) <= 0) {
            $error = true;
            $error_fields .= $field . ', ';
        }
    }

    if ($error) {
        // Required field(s) are missing or empty
        // echo error json and stop the app
        $response = array();
        $app = \Slim\Slim::getInstance();
        $response["error"] = true;
        $response["message"] = 'Required field(s) ' . substr($error_fields, 0, -2) . ' is missing or empty';
        echoRespnse(400, $response);
        $app->stop();
    }
}
//Validating user api key
     //If the api key is there in db, it is a valid key
     //@param String $api_key user api key
     //@return boolean

    public function isValidApiKey($email) {


        $stmt = $this->conn->prepare("SELECT id from users WHERE email = ?");
        $stmt->bind_param("i", $email);

        $stmt->execute();
        $stmt->store_result();
        $num_rows = $stmt->num_rows;
        $stmt->close();
        return $num_rows > 0;
    }

/**
     * Fetching user id by api key
     * @param String $api_key user api key
     */
    public function getUserId($email) {
        $stmt = $this->conn->prepare("SELECT id FROM users WHERE email = ?");
        $stmt->bind_param("s", $email);
        if ($stmt->execute()) {
            $stmt->bind_result($user_id);
            $stmt->fetch();
            // TODO
            // $user_id = $stmt->get_result()->fetch_assoc();
            $stmt->close();
            return $user_id;
        } else {
            return NULL;
        }
    }

     // Fetching all user tasks
     // @param String $user_id id of the user

    public function getAllUserTasks($user_id) {

        $stmt = $this->conn->prepare("SELECT t.* FROM tasks t, user_tasks ut WHERE t.id = ut.task_id AND ut.user_id = ?");
        $stmt->bind_param("i", $user_id);
        $stmt->execute();
        $tasks = $stmt->get_result();
        $stmt->close();
        return $tasks;
    }