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.