ASP ile MySQL ‘e Bağlantı Yapmak Ve Kullanmak

ASP İLE MySQL VERİTABANINA BAĞLANTI YAPMAK VE KULLANMAK

Merhaba ASP Coder’ları. Bugün Access’dan uzaklaşacağız ve farklı
bir veritabanına değineceğiz. MySQL hakkında bilgi almak istiyorsanız.
Öncelikle bu adresteki (http://www.ceturk.com/makaleoku.asp?id=24)
Ayhan Ergün’ün MySQL ile ilgili makalesine göz gezdirmenizi tavsiye
ederim.

MySQL veritabanı, Access’e göre aynı anda daha fazla kullanıcının
bağlanacağı, zor işlemler yapacağı fakat yine de Access’ten çok daha
performanslı bir veritabanıdır. MySQL veritabanları bir hosting
müşterisinin indirebileceği dosyalar değildir. Müşteri sadece
veritabanını açar, içine tablolarını yapar, verileri doldurur,
veritabanını kullanır fakat dosyalar sunucunun, müşterinin
erişemeyeceği bir kısmında depolanır.

Eğer projenizi internette de yayımlamayı düşünüyor iseniz sunucu yöneticisiyle görüşün. MySQL’in kurulu olup olmadığını öğrenin.

Access’te hatırladığınız gibi *.mdb dosyalarımızı projemiz içinde
taşıyarak istediğimiz zaman kullanabiliyorduk. Fakat bu MySQL’de mümkün
değil. Biraz daha açıklamamız gerekecek:

MySQL veritabanı da Microsoft SQL Server gibi, dosyaları sunucuda
C:\Program Files\MySQL\bin gibi bir klasör içinde tutar ve herhangi bir
müşteri buraya ulaşamaz. Ayrıca bu dosyalar sistem dosyalarıdır ve
doğrudan proje içinde kullanılamaz. Yani o klasördeki dosyalar ile
bizim bir ilgimiz yok.

IIS üzerine MySQL Server ve MyODBC Kurulumu

Öncelikle dosyaları indirelim:

http://dev.mysql.com/downloads/

adresinden girip MySQL 5.0 gibi bir dosya ve bir MyODBC
indireceksiniz. Bu dosyalar tamamen ücretsizdir ve GNU/GPL lisansı
altında kullanılmaktadır.

Ben en güncel linkleri vereyim:

MySQL 5.0: http://dev.mysql.com/get/Downloads/MySQL-5.0/mysql-5.0.24-win32.zip/from/pick

MyODBC 3.51:

http://dev.mysql.com/get/Downloads/MyODBC3/mysql-connector-odbc-3.51.12-win32.msi/from/pick

Adreslere girerek bir mirror seçin ve indirmeye başlayın. Dosyaların inmesi tamamlandıktan sonra MySQL 5.0’ı kuracağız.

Mysql-5.0.24-win32.zip dosyasını açıp Setup.exe den kurmaya
başlıyoruz. Çok ayar yapmaya gerek yok Next’e basarak geçebilirsiniz.
Dosyaların kurulumu bittikten sonra “Would you like to configure MySQL
Server now?” diye bir soru soracaktır. Yes diye cevaplayalım ve
veritabanımızı yapılandıralım.

Yine Next diyerek geçebiliyorsunuz. Kullanıcı adı ve şifre sorduğu
zaman ikisine de “root” yazalım. Daha sonra devam edip kurulumu
bitirelim.

Daha sonra mysql-connector-odbc-3.51.12-win32.msi dosyasını açıp
kuralım. Kurulumu bitirdikten sonra Denetim Masası->Yönetimsel
Araçlar(Administration Tools)->Veri Kaynakları ODBC (Data Sources
ODBC) bölümüne girelim.

Kullanıcı DSN (User DSN) sekmesinde “Ad:
mysql  Sürücü(Driver):MySQL ODBC 3.51 Driver” gibi bir kayıt yok ise
Ekle…(Add…) düğmesine tıklayalım.

Listeden “MySQL ODBC 3.51 Driver” tıklayalım. (Eğer listede böyle
bir öğe yok ise bilgisayarınızı yeniden başlatmanızı öneririm)
İleri(next) düğmesine tıklayalım. Gelen Formda alanları şu şekilde
dolduralım:

Data Source Name : mysql

Description : MySQL Veritabanı

Server: localhost

User : root

Password : root

(kurulumda şifreyi ve kullanıcı adını root-root ayarladığımızı
farzediyoruz. Eğer siz böyle bir şey ayarlamadıysanız büyük ihtimal
kullanıcı adınız root olacak, şifrenizi boş bırakın.)

Daha sonra Test Connection düğmesine tıklıyoruz ve “Success;
connection was made!” mesajını aldıktan sonra OK düğmesine tıklıyoruz
ve Tamam düğmesine tıklayarak ODBC Veri Kaynağı Yöneticisinden
çıkıyoruz.

(Bir sorun çıkarsa bilgisayarınızı baştan başlatın, mysql servisi
hizmete girecektir. O zaman tekrar bu işlemleri yapmayı deneyin.)

MySQL veritabanı arayüzü olmayan bir veri tabanıdır. Yönetmek için şunları bilgisayara kurmanızı öneririm:

SQLYOG FREE EDITION

http://www.webyog.com/
adresinden indirilebilir ufak bir program. Tablo veritabanı
tasarlamanızda işinize yarar. Access gibi güzel bir veri düzenleme
yeteneği yok. Ücretsiz.

SQL FRONT

http://www.sqlfront.com/

Ücretli bir program. 1 ay kadar deneyebiliyorsunuz. Access gibi
güzel bir program, çok da fonksiyonel. Veritabanı, tablo, veri
düzenlemelerini çok güzel bir biçimde yapabilirsiniz.

VERİTABANINA İLK BAĞLANTIYI YAPMAK, TABLO EKLEMEK, VERİ EKLEMEK, LİSTELEMEK VE DİĞER İŞLEMLER

Önce boş bir ASP dosyası yapalım ve aynen şu bağlantıyı oluşturalım:


<%

     mysql_server = "localhost"

     mysql_user = "root"

     mysql_pass = "root"

     mysql_db = "test"

     Connection_DSN= "DRIVER={MySQL ODBC 3.51 Driver};
SERVER="&mysql_server&"; UID="&mysql_user&";
pwd="&mysql_pass&";db="&mysql_db&";"

     Set Baglanti= Server.CreateObject("ADODB.Connection")

     Baglanti.Open Connection_DSN

     Response.Write "bağlantı kuruldu"

%>

Dosyayı wwwroot içine mysql\default.asp olarak kaydedip
http://localhost/mysql/ olarak çalıştıralım. Eğer sayfa hata vermiyor
ve “bağlantı kuruldu” yazıyor ise her şeyi çok iyi yapmışsınız
demektir.

([MySQL][ODBC 3.51 Driver]Access denied for user ‘root’@’localhost’
gibi bir hata alıyor iseniz MySQL veritabanı kullanıcı adı ve şifrenizi
yukarıdaki kodda uygun olarak doldurun. Eğer kurulumda k.adı ve şifre
belirlemediyseniz mysql_user = “root”  ve mysql_pass=”” (boş) olarak
bırakın. Büyük ihtimal bağlanacaktır.)

Bağlantımız tamamlandı ise bir sorgu ile kendi veritabanımızı yapalım isterseniz.


<%

Baglanti.Execute("create database telefonrehberi ;")

Response.Write “<br> telefonrehberi Veritabanı üretildi.”

%>

Evet. Sayfayı açınca üretildi mesajını da ekranımızda görüyorsak artık sunucuda telefonrehberi adlı bir veritabanımız var. İsterseniz artık bağlantı kodumuzdaki mysql_db değişkenine “telefonrehberi” yazalım.

Access teki veri türlerini hatırlıyor musunuz? Metin, Not, Sayı,
Uzun Tamsayı, Evet/Hayır, Tarih/Saat… Şimdi MySQL’de sık kullanacağınız
veri tiplerini görelim. Bu veri tiplerini Google’dan arayarak detaylı
özelliklerini, limitlerini bulabilirsiniz:

VARCHAR(50) : 50 karakterlik bir metin veri tipi. Access’teki Metin tipi gibi.

TINYINT (6) : 6 karakterli tamsayı alanı yaratır. Ondalık sayı girilmez

INT(11) : 11 basamaklı tamsayı alanı yaratır. Ondalık sayı girilmez

BIGINT (20) : 20 basamaklı tamsayı alanı yaratır. Ondalık sayı girilmez

DOUBLE : Ondalık sayı girebileceğiniz ve büyük sayılar alabilen bir tamsayı alanı.

LONGTEXT : Access’teki not adlı metin alanı. Sınırsız gibi. 2,14 gb yazı alabilir.

SET(‘e’,’h’) : Sadece e harfi veya h harfinin girilebileceği, iki seçenekli bir Evet/Hayır veri alanı gibi.

DATETIME, DATE, TIME: MySQL tarih alanı. MySQL’e veri girerken veriyi 2 tarz girebilirsiniz:

(yyyy-gg-aa sa:dk:sn) veya (yyyyggaasadksn) olarak. PHP kullananlar
Unix Epoch tarihi olarak da girebilir. Tabi bu ASP yazanları
ilgilendirmiyor. ASP  yazanlar Now() fonksiyonu ile tarih ekleyebilir.
Projede tarih kullanılacaksa en uygunu DATETIME kullanmaktır. Tarihleri
varchar gibi alanlarda saklamak yanlış olacaktır.

Peki şimdi bir telefon defteri tablosunu nasıl yapabiliriz görelim.
Eğer verdiğimiz SQL Front, SQLYOG gibi programlarla bağlanırsanız
komutlar kullanmadan kendi tablolarınızı ve kendi veritabanınızı
zahmete girmeden tasarlayabilirsiniz.Bu programlardan biriyle
telefondefteri veritabanımıza bağlanalım ve sağ tıklayıp Yeni Tablo
(New Table) üretelim:

id : (primary key)(auto_increment) int(11)

isim : varchar(100)

meslek : varchar(50)

telefon : bigint(20)

Bu tablonun SQL komutuyla yapımı şöyle olacaktır:


CREATE TABLE `telefondefteri` (

  `id` int(11) NOT NULL auto_increment,

  `isim` varchar(100) default NULL,

  `meslek` varchar(50) default NULL,

  `telefon` bigint(20) default NULL,

  PRIMARY KEY  (`id`)

) Engine=InnoDB ;

Artık telefonrehberi veritabanımız altında telefondefteri tablomuz var.

Bu komut ile de tablomuzu üretebiliriz. Burada dikkatinizi sorgu
sonundaki Engine kısmı çekebilir. Bu, tablonun hangi veritabanı
motoruyla yönetileceğini gösterir. InnoDB, MyISAM, ISAM, MEMORY,
MRG_MYISAM gibi türleri vardır. Eğer kayıtlarınız on binleri bulmayacak
ise InnoDB iyidir fakat çok kayıt bulunacak ise MyISAM’ı tavsiye
ederim.

Not: MySQL’de SQL sorgu satırının sonuna “;” (noktalı virgül) koymalısınız. Eğer tek satır sorgu yazıyorsanız buna gerek yoktur.

Şimdi de birkaç kayıt eklemeye ne dersiniz?


<%

Baglanti.Execute("INSERT INTO telefondefteri (isim,meslek,telefon) VALUES (‘ahmet alp balkan’,’doktor’,’5056872347′)  ;")

Baglanti.Execute("INSERT INTO telefondefteri (isim,meslek,telefon) VALUES (‘gürcan balci’,’insaat mühendisi’,’5334169988′)  ;")

Baglanti.Execute("INSERT INTO telefondefteri (isim,meslek,telefon) VALUES (‘kerim candan’,’berber’,’2625281611′)  ;")

Response.Write “3 kayıt eklendi”

%>

Evet kayıtlarımız böyle ekleniyor. Geliştirmeye açık kodlar. ASP
ile deneyerek, formları, değişkenleri kullanarak kayıtlar
ekleyebilirsiniz. Şimdi de kayıtları listelemeye ne dersiniz:


<%

Set TelefonDefteriKayitlari = Baglanti.Execute(“Select * from telefondefteri ;”)

Do Until TelefonDefteriKayitlari.eof

Kayit = Kayit +1

%>

(<%=Kayit%>) İsim: <%= TelefonDefteriKayitlari(“isim”)%>

(<%=TelefonDefteriKayitlari(“meslek”)%>) <br />

Telefon : <%=TelefonDefteriKayitlari(“telefon”)%>

<br /><br /><br />

<%

TelefonDefteriKayitlari.MoveNext

Loop

%>

Bu kodun çıktısı şu şekilde olacaktır:

(1) İsim: ahmet alp balkan (doktor)

Telefon : 5056872347

(2) İsim: gürcan balci (insaat mühendisi)

Telefon : 5334169988

(3) İsim: kerim candan (berber)

Telefon : 2625281611

Gördüğünüz üzere kayıtlarımız listelendi. Fakat ASP deki şu kod açma tarzını hatırladınız mı?

     Set rs= server.createobject("adodb.recordset")

     Sorgu = “select * from telefondefteri”

     Rs.Open Sorgu,Connection,3,1

Artık bu tarz recordset açmayı kullanmayacağız. Çünkü MySQL
kullanırken bize hiçbir getirisi olmayacak. Önceden Rs.AddNew Rs.Update
Rs.RecordCount Rs.Delete kullanırdınız. Ama artık bu yok. Bütün
işlemlerinizi SQL Komutları ile yapacaksınız. Örneğin:

Ekleme Komutu :

INSERT INTO telefondefteri (isim,meslek,telefon) VALUES (‘gürcan balci’,’insaat mühendisi’,’5334169988′) ;

INSERT INTO kisiler (‘isim’,’kayittarihi’) VALUES (‘dilan fındıkçı’,’20060813201439’);

Silme Komutu:

DELETE FROM telefondefteri where isim=’gürcan balci’;

Düzeltme Komutu:

UPDATE telefondefteri set isim=’mehmet balci’, meslek=’ogrenci’ where isim=’gürcan balci’;

Kayıt Sayısını Almak:

SELECT COUNT(*) AS TOPLAM FROM telefondefteri;

Kullanımı örneğin şu şekildedir:


<%

Set ToplamKisi = Baglanti.Execute(“SELECT COUNT(*) AS TOPLAM FROM telefondefteri;”)

Response.Write Toplamkisi(“TOPLAM”)

%>

Bu komutları daha da araştırarak öğrenebilirsiniz. Biz yüzeysel
olarak değindik. Sayfalama konusunda ise Google’da “MySQL Sayfalama”
diye arama yaparak güzel sonuçlara ulaşabilirsiniz.

MySQL ile daha iyi ve performanslı çalışmalar yapabilmeniz dileğiyle.

Kaynak

Bu yazı Programlama içinde yayınlandı. Kalıcı bağlantıyı yer imlerinize ekleyin.

Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Log Out / Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Log Out / Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Log Out / Değiştir )

Google+ fotoğrafı

Google+ hesabınızı kullanarak yorum yapıyorsunuz. Log Out / Değiştir )

Connecting to %s