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

Dikkat: Bu yazının yazılma tarihinin ü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 ?
Üye Resmi fmit
10 Ağustos Cumartesi ´13 19:54
<div class="row-fluid">
<div class="span12">
<!--PAGE CONTENT BEGINS-->

<div class="row-fluid">
<div class="span12"></div><!--/span-->
</div><!--/row-->

<h4 class="pink">
<i class="icon-hand-right icon-animated-hand-pointer blue"></i></h4>
<div class="row-fluid">
 <h3 class="header smaller lighter blue">Cari Hesap Tablosu</h3>
<div class="table-header">
CARİ İŞLEMLER
                                    
</div>

<table id="sample-table-2" class="table table-striped table-bordered table-hover">
<thead>
<tr>
<th class="center">
<label>
<input type="checkbox" />
<span class="lbl"></span>
</label>
</th>
<th>Cari Adı</th>
<th>Cep Telefonu</th>
<th class="hidden-480">Bakiyesi</th>

<th class="hidden-phone">
<i class="icon-time bigger-110 hidden-phone"></i>
Çalışma Şekli
 </th>
<th class="hidden-480">Durumu</th>

<th>Düzenleme</th>
</tr>
</thead>

<tbody>
<tr>
<td class="center">
<label>
<input type="checkbox" />
<span class="lbl"></span>
</label>
</td>

<td>&nbsp;</td>
<td>&nbsp;</td>
<td align="left" class="hidden-480">&nbsp;</td>
<td class="hidden-phone">&nbsp;</td>

<td class="hidden-480">
<span class="label label-warning">Expiring</span>
</td>

<td class="td-actions">
<div class="hidden-phone visible-desktop action-buttons">
<a class="blue" href="&#35;">
<i class="icon-zoom-in bigger-130"></i>
</a>

<a class="green" href="&#35;">
<i class="icon-pencil bigger-130"></i>
</a>

<a class="red" href="&#35;">
<i class="icon-trash bigger-130"></i>
</a>
</div>

<div class="hidden-desktop visible-phone">
<div class="inline position-relative">
<button class="btn btn-minier btn-yellow dropdown-toggle" data-toggle="dropdown">
<i class="icon-caret-down icon-only bigger-120"></i>
</button>

<ul class="dropdown-menu dropdown-icon-only dropdown-yellow pull-right dropdown-caret dropdown-close">
<li>
<a href="&#35;" class="tooltip-info" data-rel="tooltip" title="View">
<span class="blue">
<i class="icon-zoom-in bigger-120"></i>
</span>
</a>
</li>

<li>
<a href="&#35;" class="tooltip-success" data-rel="tooltip" title="Edit">
<span class="green">
<i class="icon-edit bigger-120"></i>
</span>
</a>
</li>

<li>
<a href="&#35;" class="tooltip-error" data-rel="tooltip" title="Delete">
<span class="red">
<i class="icon-trash bigger-120"></i>
</span>
</a>
</li>
</ul>
</div>
</div>
</td>
</tr>
</tbody>
</table>
</div>

<div id="modal-table" class="modal hide fade" tabindex="-1">
<div class="modal-header no-padding">
<div class="table-header">
<button type="button" class="close" data-dismiss="modal">&times;</button>
Results for "Latest Registered Domains"
</div>
</div>

<div class="modal-body no-padding">
<div class="row-fluid">
<table class="table table-striped table-bordered table-hover no-margin-bottom no-border-top">
<thead>
<tr>
<th>Domain</th>
<th>Price</th>
<th>Clicks</th>

<th>
<i class="icon-time bigger-110"></i>
Update
</th>
</tr>
</thead>

<tbody>
<tr>
<td>
<a href="&#35;">ace.com</a>
</td>
<td>$45</td>
<td>3,330</td>
<td>Feb 12</td>
</tr>

<tr>
<td>
<a href="&#35;">base.com</a>
</td>
<td>$35</td>
<td>2,595</td>
<td>Feb 18</td>
</tr>

<tr>
<td>
<a href="&#35;">max.com</a>
</td>
<td>$60</td>
<td>4,400</td>
<td>Mar 11</td>
</tr>

<tr>
<td>
<a href="&#35;">best.com</a>
</td>
<td>$75</td>
<td>6,500</td>
<td>Apr 03</td>
</tr>

<tr>
<td>
<a href="&#35;">pro.com</a>
</td>
<td>$55</td>
<td>4,250</td>
<td>Jan 21</td>
</tr>
</tbody>
</table>
</div>
</div>

<div class="modal-footer">
<button class="btn btn-small btn-danger pull-left" data-dismiss="modal">
<i class="icon-remove"></i>
Close
</button>

<div class="pagination pull-right no-margin">
<ul>
<li class="prev disabled">
<a href="&#35;">
<i class="icon-double-angle-left"></i>
</a>
</li>

<li class="active">
<a href="&#35;">1</a>
</li>

<li>
<a href="&#35;">2</a>
</li>

<li>
<a href="&#35;">3</a>
</li>

<li class="next">
<a href="&#35;">
<i class="icon-double-angle-right"></i>
</a>
</li>
</ul>
</div>
</div>
</div><!--PAGE CONTENT ENDS-->
</div><!--/.span-->
</div>
Üye Resmi fmit
10 Ağustos Cumartesi ´13 19:57
yukardaki verdigim kodda mssql bağlantısı yapıp belirttigim tablolara veri getirmek istiyorum mesala cari adi kısmına nasıl yapabilirim sql2008 kullanıyorum localde
Üye Resmi Hasan Çakır
4 Ağustos Pazartesi ´14 06:54
abi yazıyonuz güzel hoşta türkçe karakteri çekerken patlıyo.Biride sormuyo çözümü varmı?
Üye Resmi deniz mavi
24 Şubat Çarşamba ´16 02:11
Php v5.5.12 kullanıyorum MsSql ile ilgili bağlantı ve metotları bu sürüme göre de anlatabilir misiniz.
Üye Resmi Çetin özdemir
15 Nisan Cuma ´16 06:20
Kısa ve net anlatım için teşekkürler
Yeni Yorum *
İletişim Bilgileri
*
*
E-Posta adresiniz gösterilmeyecektir.
(unut)
Güvenlik Kodu *

Gönderiliyor