超薄框架 INSERT 查询不起作用
Slim framework INSERT query not working
我正在使用 Slim 框架为服务器数据库构建 RESTful API。我一直在绞尽脑汁想弄清楚为什么我下面的 INSERT 语句没有执行。每次我 运行 它时,我都会收到一个回复说 "error: true" 和 "Failed to save sound. Please try again." 消息。通过它没有出现在我的数据库中这一事实验证了这个错误。我的 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 等也是如此。有什么建议或意见吗?谢谢!
您的比较是使用单个等号:
$sound_result = SOUND_CREATED_SUCCESSFULLY
应该是
$sound_result === SOUND_CREATED_SUCCESSFULLY
.
您可以使用 PHP CodeSniffer 检测这个问题和许多类似的问题。这是一个非常有用的工具,可以很好地补充任何 PHP 项目。
经过仔细调试,发现问题是 user_id 没有正确传递(它始终为空),因为全局变量 $user_id 每次都被重置新的 HTTP 请求。我将不得不找到一种方法来合并会话变量或类似变量以使其正常工作。希望这对以后遇到此问题的任何人都有帮助。
我正在使用 Slim 框架为服务器数据库构建 RESTful API。我一直在绞尽脑汁想弄清楚为什么我下面的 INSERT 语句没有执行。每次我 运行 它时,我都会收到一个回复说 "error: true" 和 "Failed to save sound. Please try again." 消息。通过它没有出现在我的数据库中这一事实验证了这个错误。我的 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 等也是如此。有什么建议或意见吗?谢谢!
您的比较是使用单个等号:
$sound_result = SOUND_CREATED_SUCCESSFULLY
应该是
$sound_result === SOUND_CREATED_SUCCESSFULLY
.
您可以使用 PHP CodeSniffer 检测这个问题和许多类似的问题。这是一个非常有用的工具,可以很好地补充任何 PHP 项目。
经过仔细调试,发现问题是 user_id 没有正确传递(它始终为空),因为全局变量 $user_id 每次都被重置新的 HTTP 请求。我将不得不找到一种方法来合并会话变量或类似变量以使其正常工作。希望这对以后遇到此问题的任何人都有帮助。