Здесь я работаю с простым стеком LAMP. У меня есть эта таблица blue_markers, которая имеет составной PK из 2 значений с плавающей запятой . В PHP я использую PDO. У меня есть класс Blue_marker с методом удаления. В другой папке есть скрипт под названием delete. php. Посмотрим на код:
Класс Blue_marker:
<?php
class Blue_marker {
public $latitude;
public $longitude;
//other stuff---------------------------------------------
public function delete() {
//create query
$query = 'DELETE FROM ' . $this->table_name .
' WHERE longitude= :longitude AND latitude= :latitude';
// Prepare statement
$stmt = $this->conn->prepare($query);
// Bind data
$stmt->bindValue(':longitude', $this->longitude, PDO::PARAM_STR);
$stmt->bindValue(':latitude', $this->latitude, PDO::PARAM_STR);
// Execute query
if($stmt->execute()) {
return true;
}
return false;
}
}
}
Удалить. php скрипт:
<?php
// headers, connection etc.------------------------
$blue_marker = new Blue_marker($db);
//get data from request
$data = json_decode(file_get_contents("php://input"), true);//data from body of the request (PK)
//pass data
$blue_marker->latitude = $data['latitude'];
$blue_marker->longitude = $data['longitude'];
if ($blue_marker->delete()){
http_response_code(200);
echo json_encode(array("message" => "Blue marker deleted"));
} else {
http_response_code(503);
echo json_encode(array("message" => "ERROR occurred. Blue marker NOT deleted"));
}
?>
Так в чем проблема? Код выполняет без ошибки (сервер возвращает ответ 200 OK : «Синий маркер удален»), однако на самом деле ничего не удаляется. Как ни странно, эта структура кода отлично работает со значениями INT или STRING.
Запрос выглядит так: УДАЛИТЬ http://IP_server / ... / удалить. php
{ "долгота": "11.1233997345", "широта": "11.1233997345"}
PS: я мог бы попытаться изменить тип данных с FLOAT (10,8) на VARCHAR2 (10), но это означает, что у меня чтобы внести изменения в мой код.
Спасибо за ваше время!