Slim框架INSERT查询不起作用

时间:2015-01-28 17:13:35

标签: php mysql insert slim

我正在使用Slim框架为服务器数据库构建RESTful API。我一直绞尽脑汁想弄清楚为什么我的INSERT语句没有执行。每次我运行它,我得到一个回答说“错误:真实”和“无法保存声音。请再试一次。”信息。由于它没有出现在我的数据库中,因此验证了此错误。我的API中的其他INSERT查询工作正常,当我尝试在MySQL中自己运行此插入查询时,它工作正常,但我不明白为什么这个函数不起作用!

在我的DBHandler文件中:

    public function newSound($user_id, $sound, $sound_viz, $latitude, $longitude, $location, $title) {
    $response = array();

    // Insert query
    $stmt = $this->conn->prepare("INSERT INTO sounds (user_id, sound, sound_viz, latitude, longitude, location, title) VALUES (?, ?, ?, ?, ?, ?, ?)");
    $stmt->bind_param("sssddss", $user_id, $sound, $sound_viz, $latitude, $longitude, $location, $title);
    $result = $stmt->execute();
    $stmt->close();

    // Check for successful insertion
        if ($result) {
            // Sound successfully inserted
            return SOUND_CREATED_SUCCESSFULLY;
        } else {
            // Failed to post sound
            return SOUND_CREATE_FAILED;
        }

}

在我的索引文件中:

$app->post('/sounds/', function() use ($app) {
        // check for required params
        verifyRequiredParams(array('sound', 'sound_viz', 'latitude', 'longitude', 'location','title'));

        $response = array();
        $sound = $app->request->post('sound');
        $sound_viz = $app->request->post('sound_viz');
        $latitude = $app->request->post('latitude');
        $longitude = $app->request->post('longitude');
        $location = $app->request->post('location');
        $title = $app->request->post('title');

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

        // creating new sound
        $sound_result = $db->newSound($user_id, $sound, $sound_viz, $latitude, $longitude, $location, $title);

        if ($sound_result = SOUND_CREATED_SUCCESSFULLY) {
            $response["error"] = false;
            $response["message"] = "Sound saved successfully.";
            $response['sound_id'] = $sound_id;
            echoRespnse(201, $response);
        } else {
            $response["error"] = true;
            $response["message"] = "Failed to save sound. Please try again.";
            echoRespnse(200, $response);
        }            
    });

我的数据库凭据是正确的,变量SOUND_CREATED_SUCCESSFULLY等也是正确的。有任何建议或建议吗?谢谢!

2 个答案:

答案 0 :(得分:0)

您的比较是使用单个等号:
  $sound_result = SOUND_CREATED_SUCCESSFULLY
应该是   $sound_result === SOUND_CREATED_SUCCESSFULLY

您可以使用PHP CodeSniffer检测此问题和许多类似问题。它是一个非常有用的工具,是任何PHP项目的重要补充。

答案 1 :(得分:0)

经过仔细的调试,结果是问题是user_id没有被正确传递(它总是为null),因为全局变量$ user_id被每个新的HTTP请求重置。我将不得不找到一种方法来合并会话变量或类似的方法来使这个工作。希望这对将来遇到此问题的任何人都有帮助。