Я работаю над веб-сайтом, который покажет ближайший магазин в определенном месте. Я использую формулу haversine для определения расстояния, и все работает, за исключением того, что XML не видит поля расстояния, которое я создал.параметр расстояния привязки из формулы haversine с mysqli
switch($unit) {
case "km":
$distance = 6371; // KM
break;
case "mi":
$distance = 3959; // KM
break;
}
$query = "SELECT store_id, name, address, description, longitude, latitude,
(? * acos(cos(radians(?)) * cos(radians(latitude)) * cos(radians(longitude)
- radians(?)) + sin(radians(?)) * sin(radians(latitude))))
AS distanceFromLocation FROM stores";
$stmt = $mysqli->prepare($query);
$stmt->bind_param('iddd', $distance, $user_latitude, $user_longitude, $user_latitude);
$valid_statement = true;
try {
$stmt->execute();
$stmt->store_result();
} catch(Exception $e) {
$valid_statement = false;
error_log($e->getMessage());
}
if($valid_statement) {
$stmt->bind_result($store_id, $name, $address, $description, $longitude, $latitude, $distanceFromLocation);
while($stmt->fetch()) {
echo $distanceFromLocation;
$node = $dom->createElement("marker");
$newnode = $parnode->appendChild($node);
$newnode->setAttribute("storeid", $store_id);
$newnode->setAttribute("name", $name);
$newnode->setAttribute("address", $address);
$newnode->setAttribute("lat", $latitude);
$newnode->setAttribute("lng", $longitude);
$newnode->setAttribute("distance", $distanceFromLocation);
}
}
Переменная distanceFromLocation всегда пуста, когда она попадает в цикл while. Я проверил SQL и вернет правильные значения расстояния. Любые идеи, почему я не могу получить доступ к дистанционному полю? Это потому, что это вычисленное поле?
Почему вы используете строку 'ssss' вместо числового (6371 для километров или 3959 миль) в качестве вашего первого параметра? –
Эти значения принимаются как строки, поэтому я оставил их как строки, потому что это не повлияло на результат SQL-запроса. Я попытался переключить их на: ssss, isss и iddd, и он не изменил исход запроса вообще, поэтому я оставил его как строку, когда я разместил его. В ходе работы над этим, так как я опубликовал его, я изменил его на iddd. – user3154922
Вы пытаетесь умножить на строку. PS вам не нужно параметризовать это, поскольку оно является константой. –