Gönderen Konu: ASP ile mySQL  (Okunma sayısı 18195 defa)

0 Üye ve 1 Ziyaretçi konuyu incelemekte.

Çevrimdışı Morphosis

  • Üye
  • **
  • İleti: 74
ASP ile mySQL
« : 06 Haziran 2008, 11:39:40 öö »
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.