2014-12-30 91 views
1

我正在尝试将geolocations正确插入到我的mysql数据库中,以便我可以运行查询以获取集合半径内的所有项目。PHP PDO在MySQL中插入Longditude/latituded并检查插入之前是否存在

我的分贝设置像这样: --id(整数PK) --latlon(点空间索引)

和我的函数,它检查是否地理位置存在,如果不插入看起来像这样:

function addGeoLocation($long,$lat,$deal_id,$db) 
{ 
    if($long != '' && $long > 0){ 

     $latlon = 'POINT('.$lat .' ' .$long.')'; 

     $locs = $db->row("SELECT id FROM geolocations WHERE latlon = :latlon",array("latlon"=>$latlon)); 
     if(!$locs) 
     { 
      $sql = $db->query("INSERT INTO geolocations set latlon = PointFromText(:latlon)",array("latlon"=>$latlon)); 
      $location_id = $db->lastInsertId(); 
     } 
     else 
     { 
      $location_id = $locs['id']; 
     } 

     $locs_pivot = $db->row("SELECT id FROM dailydeals_geolocations WHERE dailydeal_id = :deal_id AND geolocation_id = :location_id",array("deal_id"=>$deal_id,"location_id"=>$location_id)); 

     if(!$locs_pivot) 
     { 
      $sql = $db->query("INSERT INTO dailydeals_geolocations (geolocation_id,dailydeal_id) VALUES(:location_id,:deal_id)",array("location_id"=>$location_id,"deal_id"=>$deal_id)); 

     } 
    } 
} 

不管我怎么努力我只是不能让它插入地理我只是不停收到此错误:

Unhandled Exception. <br />SQLSTATE[22003]: Numeric value out of range: 
1416 Cannot get geometry object from data you send to the GEOMETRY field 

任何帮助会收到

提前:)

回答

0

非常感谢的MySQL的这个错误意味着你插入一个数值大于该列类型的最大允许值大。

我认为您需要再次检查您在“PointFromText”中所做的操作,或者您可以将列类型更改为足够大以容纳给定值。

+0

喜感谢你的答复我已经改变了PointFromText()GeomFromText()应该格式化该值以适应字段,但它仍然抛出相同的错误,所以我不认为这是事实。 –

+0

你能告诉我什么是拉丝龙柱的类型? –

+0

也看看下面的问题:http://stackoverflow.com/questions/16647641/saving-spatial-data-in-cakephp –

0

我的代码实际工作这个问题是我有一个latlon场也是在位置表,我手动与纬度经度值填充,因为该字段为空进口它抛出的错误:O)

相关问题