PHP'de MSSQL Bağlantısı ve Kullanımı

Dikkat: Bu yazının yazılma tarihinim üzerinden en az 60 gün geçmiş. İçerisindeki bilgiler güncelliğini yitirmiş olabilir. Yorumları ve güncellemeleri göz önünde bulundurarak yazıyı takip ediniz.

Method

MSSQL'e bağlanıp işlem yapabilmek için php'de kullanabileceğimiz 2 farklı teknik var. İlki mysql kütüphanesine çok benzeyen mssql kütüphanesi, diğeri ise ODBC kullanarak. mssql kütüphanesi ile mysql kütüphanesi arasında hiçbir fark yok, sadece mysql yerine mssql yazıp bütün işlerinizi yapıyorsunuz. Diğer teknik ise ODBC kullanarak bağlanmak.

Neden ODBC?

Çünkü odbc Microsoft'un kendi bağlantı protokoludür. Sunucu üzerinde kurulan küçük bir program ile mssql sunucunuza odbc üzerinden rahatlıkla erişebiliriz. PHP'de mssql'in kendi kütüphanesindense bu kütüphaneyi kullanmanızı öneririm. Bazı veritabanlarında Türkçe tablo adları, alan adları kullanılabiliyor. Bu tarz veritabanlarında php'deki mssql kütüphanesi sorun çıkarıyor malesef. ODBC kullanarak kolayca bu problemleri aşabiliriz.

Neler Gerek?

PHP'de Windows sunucuda odbc kütüphanesi için herhangi bir ekstra extension kurulu olması gerekmiyor, ancak *nix tabanlı (unix, linux, macos) sunucularda ise http://www.unixodbc.org/, http://www.minisoft.com/pages/middleware/ODBC_UNIX/odbc32_UNIX.html sayfalarına bakılması gerekebilir. Açıkcası linux sunucu üzerinde çalıştırmayı denemedim, tavsiye de etmem.

Nasıl Olacak Bu İş?

Şimdi mysql'deki bağlantı yapısına yakın bir yapı kullanacağız.
$baglanti = odbc_connect('DRIVER={SQL Server};SERVER=host;DATABASE=veritabani','kadi','sifre');
$baglanti değişkenine $baglanti = mysql_connect'de atadağımız gibi bir bağlantı kaynağı atıyoruz. Ancak bu fonksiyonda CONN String olarak tanımlanan cümlecik ile veritabanını doğrudan bildiriyoruz. Geriye SQL'leri işletmek kalıyor.
// sorguyu isletelim
$sorgu = odbc_exec($baglanti,"select * from tablo");

// verileri alip isleyelim
while( $bilgi = odbc_fetch_array($sorgu) ){
  print_r($bilgi);
}
İşte bu kadar kolay. Genel olarak fonksiyonlar aynı, başına mysql yerine odbc geliyor o kadar. Sorguarımızı ise odbc_exec($baglanti_degiskeni,"sorgu"); şeklinde veriyoruz. Geri kalan kısımları mysql'de bildiğiniz tekniklerle halledebiliyoruz. ODBC fonksiyonları bazı fonksiyonlarda aynı bazılarında da oldukça farklı.

http://php.net/odbc adresinden php'nin odbc fonksiyonları hakkında bilgi edinebilir.
Daha ayrıntılı bir döküman olarak şu adreslere bakabilirsiniz :
- http://phplens.com/phpeverywhere/node/view/9
- http://www.zend.com/zend/tut/odbc.php?article=odbc&kind=t&id=3416&open=1&anc=0&view=1
- http://www.phpdig.net/ref/rn63.html (güzel, örnekli bir referans)


Hazırlayan : Mehmet Fatih YILDIZ

Yorumlar

Üye Resmi ahmet genckal
6 Ekim Pazartesi ´08 10:07
emeğine saglık.çok yardımcı oldun
Üye Resmi Yusuf
6 Mart Cuma ´09 14:23
Çok Güzel anlatımlar.. Gerçekten işinin pirisin.

<a href="http://www.chatmekan.net/">Chat</a>
Üye Resmi Cihan
16 Aralık ÇarÅŸamba ´09 07:30
Teşekkürler, güzel ve kolay bir anlatımla olayı ele almışsınız. Hepimizin kafasında php ile SQL Server'ı nasıl kullanıcam diye bir soru kocaman yer kaplamakta iken bu konu ile kafamızdaki sorun ortadan kalkıyor. Dediğiniz gibi sorgu başlarıda mysql yerine mssql veya odbc terimlerini kullanmakla rahatça işlemleri yapabiliyoruz.
21 Mayıs Cuma ´10 11:03
Çok güzel bir anlatımda bulunmuşunuz hocam . Benim sorularıma biraz açıklık getiriseniz çok sevinirim.
1. Odbc ile baÄŸlantı saÄŸlıyorum. Fakat bu baÄŸlantıyı  locahost da sorunsuz bir ÅŸekilde yapıyorum. sunucu  için ise farklı bir yöntem kullanmak zorundaymışız. Ben host ile görüştüğümde freetds modulu ile baÄŸlantı yapabilirsiniz dedi. Bunu araÅŸtırdım sunucu üzerine istediÄŸi bütün iÅŸlemleri yaptım fakat baÄŸlantıyı saÄŸlayamadım. Localde sistemde root olduÄŸumdan mı izin veriyor  bu iÅŸlemleri yapmamama sunucuda ne yaptıysam olmadı çok araÅŸtırdım.Sonuç olarak sunucu üzerinden bu iÅŸlemi gerçekleÅŸtiremedim.

2. odbc bvaÄŸlantısı ile sql server veri eklediÄŸimde malum hep aynı sorun türkçe karekter sorunu insert iÅŸleminde dahil hiç sıkıntı yok türkçe karekter problemi ama kayıt yaptıktan sonra veri tabanındaki kayıt sıkıntılı bunu nasıl aÅŸabiliriz.  
Üye Resmi Ahmet Zan
25 Ekim Pazartesi ´10 19:43
merhaba ben bir şey sorcaktım böyle yaptıktan sonra uzantımızı .asp den .php mi yapcaz ?
Üye Resmi Efe
15 Mart Salı ´11 11:36
Teşekürler Üstat, emeğine sağlık.
Üye Resmi Ali Şahin
24 Mart Cumartesi ´12 02:39
Emeğinize sağlık. Aradığım bilgiyi buldum
Üye Resmi Murat
12 Nisan PerÅŸembe ´12 06:28
Merhaba, mysql 100bin basar demiÅŸsiniz mssql!e bunu neye dayanarak yazdınız anlamadım:)  bir defa mysql ile MSSQL i kıyaslamak bile çok yanlış. MSSQL in yanında mysql cocuk oyuncağı gibi kalır. mysql i iyisimi acccess ile kıyaslayın ancak onunla baÅŸ baÅŸ yarışabilir:)
Üye Resmi Gökhan
28 Mayıs Pazartesi ´12 00:36
Açıkcası LINUX SUNUCU ÜZERİNDE çalıştırmayı denemedim, tavsiye de etmem. MySQL, PostgreSQL gibi açık kaynak kodlu, mssql'e 100bin basacak veritabanı uygulamaları varken mssql kullanmak biraz saçma geliyor insana   :-)

Demiş (büyük harflere dikkat) Muratcım. Lakin sen muhalif yaklaştığın için orayı kaçırmışsın sanırım.
Üye Resmi serdar
24 Eylül Pazartesi ´12 04:08
Pek acıklayıcı olmamıs dırek olarak $baglanti   dan sonra hmen parantez ıcınde sorgulatmaya gecmıssın bundan once yapılmaı gereken nedrı atam acıklanmamıs ... ezbere yapılmıs
Üye Resmi ha ss
4 Aralık Salı ´12 12:47
ne zamandan beri mysql mssql e 100 bin basıyormuş? büyük uygulamalarda ve yüksek kullanıcılı projelerde ben de sana mssql in mysqle 100 bin basacağını rahatlıkla söyleyebilirim!
Üye Resmi sa
28 Mart PerÅŸembe ´13 10:24
Ha ss;

HH SS  Ã§ok güldürdün la beni    :-)  MSSQL o kadar iyi olsaydı Facebook  ve sana sayacaklarımın arasın Biletix gibi ÅŸirketler sence onu kullanmaz mıydı ? MSSQL kullanıcısı olarak soruyorum ?
Yeni Yorum *
İletişim Bilgileri
*
*
E-Posta adresiniz gösterilmeyecektir.
(unut)
Güvenlik Kodu *

Gönderiliyor