У меня есть этот SQL-запрос:
SELECT *, ( 3959 * acos( cos( radians(41.832100) ) * cos( radians( latitude ) ) * cos( radians( longitude) - radians(-87.789597) ) + sin( radians(41.832100) ) * 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 и перебираю командную строку на 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.832100'),
mysql_real_escape_string('-87.789597'),
mysql_real_escape_string('41.832100'),
mysql_real_escape_string('25'));
$nearby_cities = $this->db->query($query);
ПРИМЕЧАНИЕ: широта и долгота - это столбцы в моей таблице, а не переменные. Спасибо за ваш вклад!