Önce bir düzeltme yapayım, milimetre olan 6.basamak değil yaklaşık 8.inci basamak oluyor (111'i 100 kabul ederek).
Dünyanın çevresi tam 40000 km değil ve kutuplara doğru gittikçe boylamlar arası mesafe daraldığı için hesabın bölme işlemlerinde çok küsüratlı çıkması normal. Ancak bir yeri tanımlarken ekran boyutu düşünülürse 6 basamak çok yeterli, metre olarak doğru bulacaktır. Yedinci basamağı farklı olan iki yerin ekrandaki görünümü, çok zumlanmış durumda dahi gözle fark edilebilir farklılıkta olmayacaktır.
Desimal tanımında ilki toplam, ikincisi ondalık ayıraç sonrası olduğundan 22,22 yerine 25,22 daha doğru olurdu. aradaki üç fark tam enlem veya boylam değeri olması için. Ayrıca, tırnak içinde yazıldığından ayrıca (string) tip dönüştürülmesi de gereksiz değil mi? Ben ilk mesajı yazmadan önce, mysql'de decimal(18,15) olarak alanlar tanımlamış ve sizin verileri ve benzerlerini kullanarak düz php ile insert ve select sorguları yapıp düzgün çalıştığını doğrulamıştım. phpmyadmin ile baktığımda veritabanında da düzgün insert edildiği gözüküyordu. Alelacele şöyle yapmıştım.
CREATE TABLE `tabela` (
`boylam` double(18,15) DEFAULT NULL,
`adi` varchar(255) DEFAULT NULL,
`soyadi` varchar(250) DEFAULT NULL,
`enlem` decimal(18,15) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8
$data = [
'city' => 'Zakka',
'country' => 'Turkey',
'latitude' => '28.971688872711184',
'longitude' => '41.017877977434296',
];
$boylam= $data['longitude'];
$soyadi = $data['city'];
$adi = $data['country'];
$enlem = $data['latitude'];
$inet = mysql_query("INSERT INTO tabela(boylam,adi,soyadi, enlem) VALUES($boylam, '$adi', '$soyadi', $enlem)");
$gore=mysql_query("SELECT * FROM tabela");
while($adet = mysql_fetch_row($gore)) {
echo '<br/>Satir<br/>';
foreach($adet as $madet) echo $madet.'<br/>';
}