Функция удаления не работает, если привязанное значение является плавающим (с PHP PDO и MySQL) - PullRequest
0 голосов
/ 06 мая 2020

Здесь я работаю с простым стеком 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), но это означает, что у меня чтобы внести изменения в мой код.

Спасибо за ваше время!

...