#php #mysql #database
#php #mysql #База данных
Вопрос:
Я довольно новичок в php и MySQL. Я пишу программу, в которой мне нужно занимать и освобождать места, я сделал это так: я создал таблицу с именем «пробелы», в которой в качестве атрибутов указаны «id» и «occupied_by» (пользователи, которые занимают это место). Я установил для значения deafult для «occupied_by» значение NULL, так что таким образом я буду знать, занято ли место или нет. Я написал код, который занимает места, и он работает просто отлично. Но я продолжаю получать ошибки в коде, который их очищает
в constrants.php файл, который у меня есть, это
define ('SUCCESS', 301);
define ('FAIL', 302);
define ('FREE', 303);
затем в operations.php файл У меня есть этот код
public function freeSpot($id){
if(!$this->isOccupied($id)){
return FREE;
}
else {
$stmt = $this->con->prepare("UPDATE spaces SET occupied_by = NULL WHERE id = ?");
$stmt->bind_param("ss", $occupiedBy, $id);
if ($stmt->execute()){
return SUCCESS;
}else{
return FAIL;
}
}
}
private function isOccupied($id){
$query = $this->con->prepare("SELECT occupied_by FROM spaces WHERE (id = ?) LIMIT 1");
$query->bind_param("s", $occupiedBy);
$query->bind_result($occupy);
$query->execute();
$query->store_result();
return $query->num_rows > 0;
}
и в index.php файл, который я использую для проверки кода на POSTMAN, у меня есть этот код:
$app->post('/freeSpot/{id}', function (Request $request, Response $response) {
$pSpaceId = $request->getAttribute('id');
$requestData = $request->getParsedBody();
// $occupiedBy = $requestData['occupied_by'];
$db = new DbOperations();
$result = $db->freeSpot($id);
$responseData = array();
if ($result == SUCCESS) {
$responseData['error'] = false;
$responseData['message'] = 'spot emptied successfully';
$response->write(json_encode($responseData));
return $response
->withHeader('Content-type', 'application/json')
->withStatus(200);
} else if($result == FAIL) {
$responseData['error'] = true;
$responseData['message'] = 'Could not empty';
$response->write(json_encode($responseData));
return $response
->withHeader('Content-type', 'application/json')
->withStatus(200);
}
else if($result == FREE){
$responseData['error'] = true;
$responseData['message'] = 'spot is already empty';
$response->write(json_encode($responseData));
return $response
->withHeader('Content-type', 'application/json')
->withStatus(200);
}
return $response
->withHeader('Content-type', 'application/json')
->withStatus(422);
});
Какой бы идентификатор я ни ввел, он продолжает сообщать мне, что «место уже пустое», хотя это не так. Что не так?
Комментарии:
1. Вы переходите
$id
в обе свои функции, но пытаетесь привязаться$occupiedBy
к заполнителю. Вы, вероятно, хотите$id
bind_param()
вместо этого перейти в .2. Я, хотя, поскольку я редактирую значение
$occupiedBy
, яbind_param()
тоже должен это сделать. не должен ли я?3. Нет, bind_param предназначен для переменных, входящих в запрос. bind_result предназначен для вывода переменных. Если вы не передаете заполнитель в запрос, вам не нужно добавлять его в bind_param .
4. хорошо, спасибо за ваш ответ. извините, что беспокою вас таким количеством вопросов. Но нужно ли мне добавлять
bind_result($occupiedBY)
?5. Не в запросе обновления. Вы можете использовать его в запросе select, но только если вы собираетесь использовать значение. В противном случае это не требуется.