PHP MySQL QUERY с отрицательными двойными значениями - PullRequest
1 голос
/ 26 февраля 2020

В моей базе данных есть таблица, в которой хранятся десятичные координаты, которые я пытаюсь запросить, используя PHP и MySQL.

Проблема, с которой я сталкиваюсь, - это когда я пытаюсь получить строки, которые имеют отрицательные значения.

Я тестирую в веб-браузере URL-адрес в формате: https://example.com/coordinates.php?latfrom=51.725265&latto=51.825265&lonfrom=-1.385438&lonto=-1.285438

Вывод JSON соответствует ожиданиям с широта , но долгота извлекает все строки независимо от того, выходят ли они за пределы условия where .

<?php
$latFrom = $_GET['latfrom'];
$latTo = $_GET['latto'];
$lonFrom = $_GET['lonfrom'];
$lonTo = $_GET['lonto'];
$connection = db_connect();
if ($connection->connect_error) {
    die("Connection failed: " . $conn->connect_error);
} else {
    $query = "SELECT * FROM coordinates WHERE (`longitude` BETWEEN '" . $lonFrom . "' AND '" . $lonTo . "') AND (`latitude` BETWEEN '".$latFrom."' AND '".$latTo."')";
    $result = mysqli_query($connection,$query);
    if (!$result) {
        printf("Error: %s\n", mysqli_error($connection));
        exit();
    } else {
        $rows1 = array();
        while($r = mysqli_fetch_array($result,MYSQLI_ASSOC)) {
            $rows[] = $r;
    }
}

function filter_val($val){
    $val = array_map('utf8_encode', $val);
    return $val;
}
    $rows = array_map('filter_val', $rows);

    mysqli_close($connection);
    print json_encode($rows);
}

Если я выполню запрос с phpMyAdmin я получаю желаемый результат. Следующий запрос работает нормально:

SELECT * FROM coordinates WHERE (`longitude` BETWEEN '-1.385438' AND '-1.285438') AND (`latitude` BETWEEN '51.725265' AND '51.825265');

У меня сложилось впечатление, что самое низкое отрицательное значение должно быть первым значением в предложении WHERE. Я пытался всеми способами заставить запрос работать в php. Я также считаю, что числа с плавающей запятой / двойники хранятся в виде строк в MySQL, поэтому я попытался преобразовать значения в числа с плавающей запятой.

Я что-то упустил, но не могу понять, что это такое.

Спасибо

...