В моей базе данных есть таблица, в которой хранятся десятичные координаты, которые я пытаюсь запросить, используя 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, поэтому я попытался преобразовать значения в числа с плавающей запятой.
Я что-то упустил, но не могу понять, что это такое.
Спасибо