Первоначально с помощью следующего запроса:Включающего Haversine с PHP PDO
SELECT username, latitude, longitude, (3959 * acos(cos(radians(':lat')) * cos(radians(latitude)) * cos(radians(longitude) - radians(':lng')) + sin(radians(':lat')) * sin(radians(latitude)))) AS distance FROM users HAVING distance < '500' ORDER BY distance LIMIT 0 , 20
Это прекрасно работает, когда я запускаю его в консоли (замена моих PDO заполнителей (: латы,: LNG, и т.д.) с действительными числами), но как только я запускаю его через PHP-PDO, то есть:
$stmt = db::getInstance()->prepare($sql);
$stmt->bindParam(':lat', $lat, PDO::PARAM_STR);
$stmt->bindParam(':lng', $lng, PDO::PARAM_STR);
$stmt->bindParam(':radius', $radius, PDO::PARAM_STR);
$stmt->execute();
$result = $stmt->fetchAll();
У этого есть проблемы и ничего не возвращает.
Проблемы в том, что ПДО было обрабатывая HAVING иначе, чем необработанный запрос, по-видимому,
Так что это прекрасно, я переписал запрос Замены HAVING и новый запрос выглядит следующим образом:
SELECT * FROM (SELECT username, latitude, longitude, (3959 * acos(cos(radians(':lat')) * cos(radians(latitude)) * cos(radians(longitude) - radians(':lng')) + sin(radians(':lat')) * sin(radians(latitude))))) WHERE distance < '500' ORDER BY distance LIMIT 0 , 20
Это приводит к следующей ошибке из PDO:
исключение 'PDOException' с сообщением «SQLSTATE [42000]: ошибка синтаксиса или нарушение прав доступа: 12 48 Каждая производная таблица должна иметь свой собственный псевдоним ' в /home/bessr/local_html/site.com/pieces/functions/geo.functions.php:47 Трассировка стека: # 0 /home/bessr/local_html/site .com/частей/функций/geo.functions.php (47): PDOStatement-> Execute() # 1 {главная}
Хорошо, так что я даю ему псевдоним и мой измененный запрос выглядит следующим образом:
SELECT * FROM (SELECT username, latitude, longitude, (3959 * acos(cos(radians(':lat')) * cos(radians(latitude)) * cos(radians(longitude) - radians(':lng')) + sin(radians(':lat')) * sin(radians(latitude))) AS t) AS alias) WHERE distance < '500' ORDER BY distance LIMIT 0 , 20
Хотя я добавил псевдоним, я все еще получаю ту же ошибку. Я не уверен, где именно я ошибаюсь. Любая помощь оценивается.
это сделал трюк. Большое спасибо за помощь. – Jared