MySQL подготовил заявления - не все результаты являются обязательными
У меня возникли проблемы с возвратом расстояния в $ из подготовленного заявления. $ Station_id выводится на экран, и все хорошо, но расстояние пусто.
Я также заменил знаки вопроса и выполнил запрос непосредственно в phpmyadmin, и он возвращает столбцы distance и station_id, поэтому сам запрос выглядит нормально.
Испытывая некоторые затруднения, выясняя, почему и задавался вопросом, может ли кто-нибудь пролить свет на то, что идет не так. Пожалуйста, найдите код ниже, и если у вас есть какие-либо вопросы, не стесняйтесь спрашивать. Ох, и для фона формула sql является формула haversine
Любая помощь с благодарностью, еще раз спасибо.
<?php
require_once("../includes/station.php");
require_once("../includes/maps.php");
global $conn;
$latitude = 54.335;
$longitude = -1.45007;
//$distance = 50;
$limit_start = 0;
$limit_end = 5;
//$query = "SELECT *,(((acos(sin((".$latitude."*pi()/180)) * sin((`Latitude`*pi()/180))+cos((".$latitude."*pi()/180)) * cos((`Latitude`*pi()/180)) * cos(((".$longitude."- `Longitude`)*pi()/180))))*180/pi())*60*1.1515) as distance FROM `postcodelatlng` having distance <= ".$distance;
//$query .= ' order by distance asc limit 20, 40';
//works
//SELECT station_details.station_id, (((acos(sin((54.335*pi()/180)) * sin((`Latitude`*pi()/180))+cos((54.335*pi()/180)) * cos((`Latitude`*pi()/180)) * cos(((-1.45007- `Longitude`)*pi()/180))))*180/pi())*60*1.1515) as distance FROM `postcodelatlng`inner join station_details on station_details.post_code = postcodelatlng.postcode
// Query uses the haversine formula to calculate distance in miles as the crow flies
$query = "SELECT station_details.station_id,
(((acos(sin((?*pi()/180)) * sin((`Latitude`*pi()/180))+cos((?*pi()/180)) * cos((`Latitude`*pi()/180)) * cos(((? - `Longitude`)*pi()/180))))*180/pi())*60*1.1515) AS distance
FROM `postcodelatlng`
INNER JOIN station_details ON station_details.post_code = postcodelatlng.postcode
INNER JOIN core ON station_details.station_id = core.entity_id
WHERE core.live = 1
ORDER BY distance ASC";
$query .= ' limit ?, ?';
//echo $query;
if ($stmt = $conn->prepare($query)) {
$stmt->bind_param('sssii', $lattitude, $lattitude, $longitude, $limit_start, $limit_end);
$stmt->execute();
$stmt->bind_result($station_id, $distance);
while ($stmt->fetch()) {
echo "id: $station_id dist: $distance";
}
$stmt->close();
}
$conn->close();
?>