Welcome Guest, Not a member yet? Register   Sign In
Codeigniter database error using between clause
#1

[eluser]Andy78[/eluser]
I am getting a database syntax error from codeigniter and its generating this sql query.

Code:
SELECT `code`, `latitude`, `longitude` FROM (`postcodes`) WHERE `latitude` `BETWEEN 55`.`8616 AND 56`.`1508` AND `longitude` `BETWEEN '-3`.`9507' AND '-3`.`6131'` AND `code` LIKE 'FK%'

error You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '`BETWEEN 55`.`8616 AND 56`.`1508` AND `longitude` `BETWEEN -3`.`9507 AND -3`.`61' at line 3

The query itself works when done directly in sql :

SELECT code, latitude, longitude
FROM (
`postcodes`
)
WHERE latitude
BETWEEN 55.8616
AND 56.1508
AND longitude
BETWEEN - 3.9507
AND - 3.6131
AND code LIKE 'FK%'
LIMIT 0 , 30


But ci seems to be adding single quotes ariound the points in the long/lat values why?


Ci code:
Code:
function get_zips_in_range($zip, $range, $sort=1, $include_base=true)
{
  //get base postcode details
  $details = $this->get_zip_point($zip);
  
  if( ! $details)
  {
   return false;
  }
        
        //get the first 2 letters of the postcode
        $str = substr($zip, 0, 2);
  
  //find max - min lat / long for radius and zero point and query
  //only zips in that range.
  $lat_range = $range/69.172;
  $lon_range = abs($range/(cos($details->latitude) * 69.172));
  $min_lat = number_format($details->latitude - $lat_range, '4', '.', '');
  $max_lat = number_format($details->latitude + $lat_range, '4', '.', '');
  $min_lon = number_format($details->longitude - $lon_range, '4', '.', '');
  $max_lon = number_format($details->longitude + $lon_range, '4', '.', '');
  
  //build the sql query
  $this->CI->db->select("code, latitude, longitude");
    
  if( !$include_base)
  {
   $this->CI->db->where("code <>", $zip);
  }
  
  $this->CI->db->where("latitude BETWEEN $min_lat AND $max_lat");
        $this->CI->db->where("longitude BETWEEN $min_lon AND $max_lon");
        $this->CI->db->like('code', $str, 'after');    
  $result = $this->CI->db->get("postcodes");





#2

[eluser]insert_hilarity_here[/eluser]
There is a bug in CI 2.1.1 https://github.com/EllisLab/CodeIgniter/issues/1469

Revert to 2.1.0 is the best solution until 2.1.2 comes out
#3

[eluser]Andy78[/eluser]
Ah FFS been struggling with this for hours as well lol
#4

[eluser]insert_hilarity_here[/eluser]
fyi https://github.com/EllisLab/CodeIgniter/issues/1469 bug is fixed but its been released again as CI 2.1.1

In my tests Datamapper continues to works well.




Theme © iAndrew 2016 - Forum software by © MyBB