PHP PDO แทรกลองดิจูด / ละติจูดใน Mysql และตรวจสอบว่ามีอยู่ก่อนทำการแทรก

ฉันกำลังพยายามแทรกตำแหน่งทางภูมิศาสตร์ลงในฐานข้อมูล mysql ของฉันอย่างถูกต้อง เพื่อที่ฉันจะสามารถเรียกใช้แบบสอบถามเพื่อรับรายการทั้งหมดภายในรัศมีที่กำหนด

db ของฉันถูกตั้งค่าดังนี้: --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

ความช่วยเหลือใด ๆ จะได้รับอย่างมาก

ขอบคุณมากล่วงหน้า :)


person Adrian Brown    schedule 30.12.2014    source แหล่งที่มา


คำตอบ (2)


รหัสของฉันใช้งานได้จริงกับปัญหานี้คือ ฉันมีฟิลด์ latlon ในตารางตำแหน่งซึ่งฉันเติมค่า lat lon ด้วยตนเองเนื่องจากฟิลด์นี้เป็นโมฆะเมื่อนำเข้า มันทำให้เกิดข้อผิดพลาด :o)

person Adrian Brown    schedule 30.12.2014

ข้อผิดพลาดของ MySQL นี้หมายความว่าคุณกำลังแทรกค่าตัวเลขที่มากกว่าค่าสูงสุดที่อนุญาตสำหรับประเภทคอลัมน์นั้น

ฉันคิดว่าคุณต้องตรวจสอบอีกครั้งว่าคุณกำลังทำอะไรอยู่ที่ "PointFromText" หรือคุณสามารถเปลี่ยนประเภทคอลัมน์ให้ใหญ่ขึ้นพอที่จะเก็บค่าที่กำหนดได้

person Mohammad Awwaad    schedule 30.12.2014
comment
สวัสดี ขอบคุณสำหรับการตอบกลับของคุณ ฉันเปลี่ยน PointFromText() เป็น GeomFromText() ที่ควรจัดรูปแบบค่าให้พอดีกับฟิลด์ แต่ยังคงแสดงข้อผิดพลาดเดิมดังนั้นฉันจึงไม่คิดว่าจะเป็นเช่นนั้น - person Adrian Brown; 30.12.2014
comment
คุณช่วยบอกฉันได้ไหมว่าคอลัมน์ latlon ประเภทนี้คืออะไร? - person Mohammad Awwaad; 01.01.2015
comment
โปรดดูปัญหาต่อไปนี้ด้วย: stackoverflow.com/ คำถาม/16647641/ - person Mohammad Awwaad; 01.01.2015