У меня есть это SQL-запрос:SQL запрос работает на PhpMyAdmin, но не Codeigniter
SELECT *, (3959 * acos(cos(radians(41.0)) * cos(radians(latitude)) * cos(radians(longitude) - radians(-87.789597)) + sin(radians(41.0)) * sin(radians(latitude)))) AS distance FROM cities_extended HAVING distance < 10 ORDER BY distance LIMIT 0 , 5;
, когда я запускаю его через PhpMyAdmin это работает. Однако я попытался реализовать его с помощью codeigniter через $ this-> db-> query(); функция.
так:
$nearby_cities = $this->db->query("SELECT city,state,zip, (3959 * acos(cos(radians($latitude)) * cos(radians(latitude)) * cos(radians(longitude) - radians($longitude)) + sin(radians($latitude)) * sin(radians(latitude)))) AS distance FROM cities_extended HAVING distance < 25 ORDER BY distance LIMIT 0 , 3;");
и я получаю это:
Error Number: 1582
Incorrect parameter count in the call to native function 'radians'
SELECT city,state,zip, (3959 * acos(cos(radians()) * cos(radians(latitude)) * cos(radians(longitude) - radians()) + sin(radians()) * sin(radians(latitude)))) AS distance FROM cities_extended HAVING distance < 25 ORDER BY distance LIMIT 0 , 3;
это не имеет смысла, что, когда я бегу точно такой же запрос на PHPMyAdmin и Повсеместно в Comman линию на MySQL это работает , но с php и codeigniter это не так. Может ли кто-нибудь помочь?
ПРОБЛЕМА решаемые
$query = sprintf("SELECT *, (3959 * acos(cos(radians('%s')) * cos(radians(latitude)) * cos(radians(longitude) - radians('%s')) + sin(radians('%s')) * sin(radians(latitude)))) AS distance FROM cities_extended HAVING distance < '%s' ORDER BY distance LIMIT 0 , 20",
mysql_real_escape_string('41.0'),
mysql_real_escape_string('-87.789597'),
mysql_real_escape_string('41.0'),
mysql_real_escape_string('25'));
$nearby_cities = $this->db->query($query);
Примечание: широта и долгота столбцов в моей не таблицы переменных. Спасибо за ваш вклад!
Почему вы делаете эти вычисления на стороне sql? Вы могли бы предварительно предсказать их до $ this-> db-> query(). – Panagiotis
, когда вы помещаете '$ query =" SELECT city, state, zip, (3959 * acos (cos (радиан ($ широта)) * cos (радиан (широта)) * cos (радиан (долгота) - радиан ($ долгота)) + sin (радиан ($ широта)) * sin (радиан (широта)))) AS расстояние от городов_расширенный HAVING расстояние <25 ORDER BY distance LIMIT 0, 3; ", а затем' var_dump ($ query); 'что делать Вы получаете? – artragis
Вы уверены, что '$ широта' и' $ долгота' имеют значения, которые, по вашему мнению, у них есть? Дважды проверьте это. –