2 gündür PHP ile mssql den veri çekmeye çalışıyorum. Sonunda becerebildim. Hatta çektikten sonra ki UTF-8 sorununu da basit bir fonksiyonla hallettim. Sizlerinde kullanabilmesi için burada paylaşıyorum;

DİKKAT!!

Linux sistemlerde sistem yöneticileri güvenlik sebebiyle gerekli modülleri aktif etmiyorlar. Bu nedenle eğer SQL Server'dan bir veri çekeceksiniz gerekli kodu Windows host üzerinde çalıştırmalısınız.


1. Önce Sistem Kontrolü

Umalımda "Odbc ile bağlanılabilir" yazısını görürsünüz.

if(function_exists(odbc_connect)){
    echo "Odbc ile bağlanılabilir <br><br>";
}else{
    echo "Kullanılabilir Değil <br><br>";
}
2. Bağlantı Değişkenlerini Atayın

Başarılı yazısını görüyorsanız devam edebilirsiniz. Zaten bu alanda değiştirmeniz gereken bir alan yok.

//veritabanı bilgilerini girin
$ser = '88.249.26.xxx';
$user = 'kullanıcı adı';
$pass = 'şifre';
$db = 'veritabanı';
3. Veritabanı Bağlantısı

$conn=odbc_connect("DRIVER=SQL Server;SERVER=".$ser.";UID=".$user.";PWD=".$pass.";
DATABASE=".$db.";
Address=".$ser.",1433","","");

echo  "Bağlantı: $conn";

if ($conn <= 0) { echo "Başarısız"; exit; }
else { echo "Başarılı"; };
4. Sorgumuzu Çalıştıralım

!! Normalde verilerim "LG_001_ITEMS" isimli tabloda tutuluyor. Bende from dbo.LG_001_ITEMS şeklinde sorgu gerçekleştiriyordum ve bir türlü beceremedim. Çözüm ise veritabanı ve tablo arasında bulunan schema yı sorguya eklemek. Mesela schema adı "dbo" idi ve benim sorgumda from dbo.LG_001_ITEMS şeklinde.

$sql="select * from dbo.LG_001_ITEMS";  //koyu yer tablo adı
$result=odbc_exec($conn, $sql) or die (odbc_errormsg());

$row=odbc_exec($conn,$sql);
5. Türkçe Karakter Sorununu Düzelten Fonksiyon

İlk olarak kendiniz hatalı gelen karakterleri tespit edin ve daha sonra karşılıklarıyla beraber aşağıdaki fonksiyonu düzenleyin. Örneğin bende "Ş" harfi "Ý" olarak geliyordu.

function duzelt($metin)
{ $metin = trim($metin); //$metin = strtolower($metin);
$bul = array("Ý","Ð","Þ");  $duzelt = array("İ","Ğ","Ş");  
$metin = str_replace($bul, $duzelt, $metin ); 
return $metin;
}
6. Verileri Düzelterek Çekelim

Bu aşamada direkt yazdırabilirsiniz gelen verileri

if(!$row){exit("Hata");}
else{

while(odbc_fetch_row($row)){
$sonuc=utf8_encode(odbc_result($row,"NAME"));
	
	echo duzelt($sonuc)."<br>";
} }

7. Tüm Kod

<?php

if(function_exists(odbc_connect)){
    echo "Odbc ile bağlanılabilir <br><br>";
}else{
    echo "Önce Mssql için PHP i yapılandır <br><br>";
}


//veritabanı bilgilerini girin
$ser = '88.249.26.xxx';
$user = 'kullanıcı adı';
$pass = 'şifre';
$db = 'veritabanı';


$conn=odbc_connect("DRIVER=SQL Server;SERVER=".$ser.";UID=".$user.";PWD=".$pass.";
DATABASE=".$db.";
Address=".$ser.",1433","","");

echo  "Bağlantı: $conn";

if ($conn <= 0) { echo "Başarısız"; exit; }
else { echo "Başarılı"; };

$sql="select * from dbo.LG_001_ITEMS]"; //koyu yer tablo adı
$result=odbc_exec($conn, $sql) or die (odbc_errormsg());

$row=odbc_exec($conn,$sql);



function duzelt($metin)
{ $metin = trim($metin); //$metin = strtolower($metin);
$bul = array("Ý","Ð","Þ");  $duzelt = array("İ","Ğ","Ş");  $metin = str_replace($bul, $duzelt, $metin ); //baslik hazır
return $metin;
}

  
echo "<br><br><br><strong>İLK 50 SONUÇ</strong><br><br>";


if(!$row){exit("Hata");}
else{

while(odbc_fetch_row($row)){
$sonuc=utf8_encode(odbc_result($row,"NAME"));
	
	//echo $sonuc."<br>";
	echo duzelt($sonuc)."<br>";
}}
?>

SONUÇ

Bu işlemler sonucu SQL Serverdaki herhangi bir veriyi rahatlıkla çekebilirsiniz. Dikkat etmeniz gereken tek şey çekilen veriyi düzeltirken (5.adım) gelen hatalı karakterleri kendinize göre diziye eklemelisiniz. Bende 3 karakter bozuk geliyordu ve bunları karşılıklarıyla değiştirdim.


Mod arkadaş isterse konuyu sabitleyebilir. Çok kullanılan birşey değil çünkü PHP ile mssql bağlantısı. Birileri kullanacağı zamanda boşuna aramasın, burdan alıp kullansın.