PHP PDO Sisipkan Bujur / Lintang di Mysql dan periksa apakah ada sebelum menyisipkan

Saya mencoba memasukkan geolokasi dengan benar ke dalam db mysql saya sehingga saya dapat menjalankan kueri untuk mendapatkan semua item dalam radius yang ditentukan.

db saya diatur seperti ini: --id (integer pk) --latlon (indeks spasial titik)

dan fungsi saya yang memeriksa apakah geolokasi ada dan jika tidak disisipkan terlihat seperti ini:

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));

        }
    }
}

Tidak peduli apa yang saya coba, saya tidak bisa memasukkan geo. Saya terus mendapatkan kesalahan ini:

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

Bantuan apa pun akan sangat diterima

Terima kasih banyak sebelumnya :)


person Adrian Brown    schedule 30.12.2014    source sumber


Jawaban (2)


Kode saya benar-benar berfungsi, masalah ini adalah saya memiliki bidang latlon juga di tabel lokasi yang saya isi secara manual dengan nilai lat lon karena bidang ini nol saat impor sehingga menimbulkan kesalahan :o)

person Adrian Brown    schedule 30.12.2014

Kesalahan MySQL ini berarti Anda memasukkan nilai angka yang lebih besar dari nilai maksimum yang diperbolehkan untuk tipe kolom tersebut.

Saya pikir Anda perlu memeriksa lagi apa yang Anda lakukan di "PointFromText" atau Anda dapat mengubah jenis kolom Anda menjadi cukup besar untuk menampung nilai yang diberikan.

person Mohammad Awwaad    schedule 30.12.2014
comment
hai terima kasih atas balasan Anda. Saya telah mengubah PointFromText() menjadi GeomFromText() yang harus memformat nilainya agar sesuai dengan bidang tetapi masih menimbulkan kesalahan yang sama jadi menurut saya bukan itu masalahnya. - person Adrian Brown; 30.12.2014
comment
Bisakah Anda memberi tahu saya apa jenis kolom latlon? - person Mohammad Awwaad; 01.01.2015
comment
Lihat juga masalah berikut: stackoverflow.com/ pertanyaan/16647641/ - person Mohammad Awwaad; 01.01.2015