İNTERNET PROGRAMLAMA -2
Veritabanı Nedir? Veritabanı, bilgilerin düzenli bir ş ekilde saklandı ğ ı yapılardır. De ğ i ş kenlerdeki bilgiler ve formlardan gelen tüm bilgiler geçicidir. Sayfa kapatıldı ğ ında yada de ğ i ş tirildi ğ inde kaybolurlar. Bu bilgileri ileride kullanmak için saklamak isterseniz bunları ya bir dosyaya yada bir veritabanına kaydedilmelidir.
Veritabanı Nedir? Bilgilerin dosyalara kaydedilmesi, okunması, de ğ i ş tirilmesi ve aranması gibi i ş lemler oldukça zor ve kullanı ş sızdır. Ama bazı özel durumlar (sayaç, yapılandırma bilgileri, site haritası,...) için dosyalama yapmak belki daha kolaydır. Bunun yanında bilgilerin veritabanına kaydı, yönetimi ve sorgulanması dosyalamaya göre çok çok kolay ve hızlıdır. Bundan dolayı ziyaretçilerden gelen bilgiler ve bizim ekleyece ğ imiz tüm bilgiler için veritabanı kullanmak çok daha mantıklıdır.
Veritabanı Nedir? Veritabanında ortak özelliklere sahip bilgiler gruplandırılarak saklanır. Bu gruplara tablo denir. Tablodaki her satıra da kayıt denmektedir. Kayıtların özelliklerini ifade eden her sütuna da alan denilmektedir. Bu alanlarda kayıtlara ait bilgiler saklanır. Özetle; veritabanında bilgiler düzenli bir ş ekilde tablolardaki alanlarda saklanır.
Veritabanı Nedir? puanlaruyeler idpuanidadisoyadicinsiyetidogum_yili 5655AliBayrake VeliTepee AyşeDerek1990 mesajlar idkonuicerik 5vizeVize notlarının % kaçı alınacak? 8itirazBeklediğimden düşük aldım kontrol edilebilir mi? 12finalFinal konularına vizelerde dahil mi?
Veritabanı Nedir? Yukarıdaki veritabanında puanlar, uyeler ve mesajlar olmak üzere 3 ayrı tablo vardır. puanlar tablosunda ;id ve puan olmak üzere 2 alan, uyeler tablosunda; id, adi, soyadi, cinsiyeti ve dogum_yili olmak üzere 5 alan, mesajlar tablosunda; id, konu ve icerik olmak üzere 3 alan vardır.
Veritabanı Nedir? Ayrıca görüldü ğ ü üzere her tabloda 3 kayıt vardır. Bu ş ekilde veritabanı sunucularında bir çok veritabanı olabilir. Her kullanıcı kendi veritabanına kendisine verilen kullanıcı adı ve ş ifre ile eri ş ir.
Veritabanı Nedir? PHP ile bir çok veritabanı sunucusuna ba ğ lanılabilir. Bunlardan bazıları ş unlardır: MySQL Access MS SQL PostgreSQL Sybase Oracle
Veritabanı Nedir? Bu veritabanları içinde PHP ile beraber en çok MySQL veritabanı sunucusu kullanılmaktadır. Çünkü bu ikili birbiriyle çok uyumlu ve hızlı bir ş ekilde çalı ş abilmektedir. İ kisi de ücretsiz, açık kaynak kodlu özgür yazılımlardır.
SQL (Structured Query Language - Yapılandırılmış Sorgu Dili) SQL veritabanı sorgulama ve yönetme dilidir. Nasıl ki PHP web sayfalarını programlama dili ise, SQL de veritabanını yönetmek ve sorgulamak için kullanılan bir dildir. SQL dili ile; Yeni veritabanı olu ş turma Yeni tablolar olu ş turma Tablolara kayıt girme Girilmi ş kayıtları güncelleme Kayıt silme Kayıt arama Kayıt sorgulama gibi daha sayamadı ğ ımız bir çok i ş lem yapılabilmektedir.
SQL (Structured Query Language - Yapılandırılmış Sorgu Dili) Veritabanı kullanan dinamik ve etkile ş imli web sayfaları yapmak isterseniz muhakkak SQL dilinin temel kurallarını ve komutlarını ö ğ renmelisiniz. Daha sonra ö ğ rendi ğ iniz SQL komutlarını php fonksiyonlarıyla kullanarak veritabanı i ş lemlerini gerçekle ş tirebilirsiniz.
SQL (Structured Query Language - Yapılandırılmış Sorgu Dili) SQL yazım kurallarında; Büyük küçük harf ayrımı yoktur Komutlar birden fazla satırda yazılabilir Komutların bitiminde noktalı virgül (;) kullanılır Veritabanı adında ve alan adlarında türkçeye özgü karakterler ve bo ş luk karakteri kullanılmaz Alanlara girilen metinsel bilgiler tek tırnak (') yada çift tırnak (") içinde yazılmalıdır.
phpMyAdmin phpMyAdmin veritabanı sunucusunu görsel olarak yönetmede kullanılan, php ile yazılmı ş web arayüzüdür. Bu web arayüzünü kullanarak tüm veritabanı i ş lemlerini yapabilirsiniz. phpMyAdmin'e eri ş mek için tarayıcının adres çubu ğ una; yazmak yeterlidir.
phpMyAdmin
Php ile MySQL Bağlantısı kurma < ?PHP $baglanti 'kullanıcı adı', ' ş ifre'); $veritabani adı'); if($baglanti && $veritabani) { echo 'Ba ğ lantı kuruldu.'; } else { echo 'Ba ğ lantı kurulamadı.'; } mysql_close($baglanti); // MYSQL sunucusu ile ba ğ lantımızı koparttık ?>
Php ile MySQL Bağlantısı kurma < ?PHP $baglanti 'kullanıcı adı', ' ş ifre')or die("Ba ğ lantı Kurulamadı"); $veritabani adi')or die('Veritabanı Bulunamadı'); mysql_close($baglanti); // MYSQL sunucusu ile ba ğ lantımızı koparttık ?>
Php ile MySQL Bağlantısı kurma <?php $baglanti = mysql_connect('localhost','root','1234'); if(!$baglanti){ die('Ba ğ lantı hatası : '. mysql_error()); } mysql_select_db("ogrenciler",$baglanti); $sonuc = mysql_query("SELECT * FROM liste"); while($row = mysql_fetch_array($sonuc)){ echo $row['Ad']. " ". $row['Soyad']. ' '; }; ?>
MySQL Veri Türleri 1) Tam Sayı (integer) Veri Türleri Tam sayıların saklandı ğ ı alanlar için kullanılır. İş aretli (signed) ve i ş aretsiz (unsigned) olarak iki ş ekilde kullanılabilir. İş aretli oldu ğ unda negatif ve pozitif sayıları içerir. İş aretsiz oldu ğ unda ise sadece pozitif sayıları içerir. Kendi aralarında büyüklüklerine göre 5'e ayrılır.
MySQL Veri Türleri Veri TürüBytes MinumumMaksimum tinyint1 signed unsigned0255 smallint2 signed unsigned mediumint3 signed unsigned int4 signed unsigned bigint8 signed unsigned
MySQL Veri Türleri 2)Ondalıklı Sayı (float) Veri Türü Ondalık kısmı bulunan sayıların saklandı ğ ı alanlar için kullanılır. Kendi aralarında 4'e ayrılır.
MySQL Veri Türleri Veri TürüBytesAçıklama decimal (n,d) de ğ i ş ken Tam kısmı n, ondalıklı kısmı d uzunlukta olan ondalıklı sayılardır. 1<=n<=65, 0<=d<=30, d<=n float(n,d)4 Tam kısmı n, ondalıklı kısmı d uzunlukta olan ondalıklı sayılardır. 1<=n<=255, 0<=d<=30, d<=n double(n,d)8 real(n,d)8
MySQL Veri Türleri 3)Metin (String) Veri Türleri Harf, rakam ve simgelerden olu ş an metinsel (string) bilgilerin saklandı ğ ı alanlar için kullanılır. Genel olarak 6'ya ayırabiliriz.
MySQL Veri Türleri Veri TürüBytesAçıklama char (n)n Tam olarak n karakterli metinler için kullanılır. n karakterden daha az karakter girilse bile yine n byte yer kaplar. Varchar (n) Girilen karakter sayısı+1 (n<256) Girilen karakter sayısı+2 (256<=n) En fazla n karakterli metinler için kullanılır. Girilen karakter sayısına göre veritabanında yer kaplar. tinytextGirilen karakter sayısı+1En fazla 256 karakterli metinler için kullanılır. textGirilen karakter sayısı+2En fazla karakterli metinler için kullanılır. Medium text Girilen karakter sayısı+3En fazla karakterli metinler için kullanılır. longtextGirilen karakter sayısı+4 En fazla karakterli metinler için kullanılır.
MySQL Veri Türleri 4) Tarih/Saat (Date/Time) Veri Türleri Tarih ve saat bilgisinin saklanaca ğ ı alanlar için kullanılır. Kendi aralarında 5'e ayrılır.
MySQL Veri Türleri Veri TürüBytesAçıklama date3YYYY-MM-DD biçiminde tarih bilgisini saklar. time3HH:MM:SS biçiminde saat bilgisini saklar. datetime8 YYYY-MM-DD HH:MM:SS biçiminde hem tarih hem de saat bilgisini saklar timestam p 4 YYYY-MM-DD HH:MM:SS biçiminde hem tarih hem de saat bilgisini saklar :00:01 ile :14:07 arasında bir tarihtir. year1YYYY biçiminde sadece yıl bilgisini saklar
Tablo Oluşturma (create table) Gerçek sunucularda kullanılacak olan veritabanı bizlere verilen kontrol paneli üzerinden olu ş turulmaktadır. Olu ş turulan veritabanında kullanılacak tablolar ise ço ğ u zaman SQL komutları ile olu ş turulur. Tabloları olu ş turacak olan tüm SQL komutları genellikle setup.php yada install.php sayfasına yazılır ve bu sayfalar çalı ş tırılıp tablolar olu ş turulur. Dolayısıyla site veritabanı kurulmu ş olur.
Tablo Oluşturma (create table) create table tablo_adi (alan1 özellikleri, alan2 özellikleri, alan3 özellikleri,....); Kayıtlara ait ortak bilgilerin tablolardaki alanlarda saklandı ğ ını söylemi ş tik. Bu alanların veritürleri ve özellikleri tablo olu ş turulurken belirtilmelidir. Alanlarda kullanılan özellikleri ise ş unladır:
Tablo Oluşturma (create table) null > alanın bo ş bırakılaca ğ ını not null > alanın bo ş bırakılamayaca ğ ını signed > sayının i ş aretli olaca ğ ını unsigned > sayının i ş aretsiz olaca ğ ını primary key > alanın birincil anahtar olaca ğ ını (benzersiz de ğ ere sahip olaca ğ ını) auto_increment > sayının otomatik artaca ğ ını default > alanın vasayılan de ğ erini character set > alanda kullanılacak karakter setini tanımlamaktadır.
Tablo Oluşturma (create table) Yukarıdaki ifadeler sadece belirtilen alanın özelliklerini tanımlamaktadır. Tüm tablonun özelliklerini belirtmek için ise ş unlar kullanılır. foreign key > Tablolar arasında ili ş kili alanlar olu ş turmak için (sadece InnoDB depolama motoru için) character set > Tüm tablonun karakter setini belirtmek için type > Tabloda kullanılacak depolama motorunu tanımlamak için kullanılır.
Tablo Oluşturma (create table) Tablolarda kayıt saklamak için çe ş itli depolama algoritmaları kullanılır. Bunlar depolama motoru olarak tanımlanmaktadır. MySQL'de varsayılan depolama motoru MyISAM motorudur. E ğ er aralarında ili ş ki bulunan tablolar kullanmak isterseniz InnoDB depolama moturunu kullanmalısınız. Tabiki size hizmet veren sunucunu bunu destekleyip desteklemedi ğ ini phpMyAdmin web arayüzündeki Motorlar ba ş lı ğ ına bakarak anlayabilirsiniz.
Tablo Oluşturma (create table) idk_adisifredogum_yilicinsiyeti giris_s ayisi -mediumint -i ş aretsiz -birincil anahtar -otomatik -bo ş de ğ il -En fazla 12 karakter -bo ş de ğ il -En fazla 10 karakter -bo ş de ğ il -YYYY biçiminde yıl -Tek karakter -varsayılan olarak 'e' -int - i ş aretsiz
Tablo Oluşturma (create table) create table uyeler( id mediumint unsigned primary key auto_increment not null, k_adi varchar(12) not null, sifre varchar(10) not null, dogum_yili year, cinsiyeti char(1) default 'e', giris_sayisi int unsigned ) character set utf8 collate utf8_general_ci type=MyISAM;
Tablo Oluşturma (create table) ogrenci_noadisoyadicinsiyetisube_kodu 54AhmetÖzdemireBlp-1 72MehmetKorukeBlp-1 71Ay ş eDemirkBlp-2
Tablo Oluşturma (create table) create table ogrenciler( ogrenci_no smallint unsigned primary key not null, adi varchar(15) not null, soyadi varchar(15) not null, cinsiyeti char(1) default 'e', sube_kodu varchar(10) not null ) character set utf8 collate utf8_general_ci type=MyISAM;
Tablo Silme Seçili veritabından tablo silmek için drop table tablo_adi; komutu kullanılır. Örnek: Sırasıyla uyeler, yorumlar, altmenuler, subeler, talebeler, mufred at, ve karne isimli tabloları silelim. drop table uyeler; drop table yorumlar; drop table altmenuler; drop table subeler; drop table talebeler; drop table mufredat; drop table karne; UYARI: Kaldıralan tablodaki kayıtlar ve tablo geri alınamaz bir ş ekilde silinecektir.
Kayıt Ekleme (insert into) SQL ile veritabanındaki bir tabloya kayıt girmek için ş u komut kullanılır: insert into tablo_adi (alan1, alan2, alan3, ….) values (de ğ er1, de ğ er2, de ğ er3, …);
Kayıt Ekleme (insert into) A ş a ğ ıdaki ogrenciler tablosuna bilgileri sırasıyla 98, Fuat, Ocak, e, 11blsa olan kaydı ekleyelim. ogrenci_noadisoyadicinsiyetisinif_kodu 54AhmetÖzdemire12blsa 67HaticeErenk12blsa 18MahirSerene12blsb
Kayıt Ekleme (insert into) insert into ogrenciler (ogrenci_no, adi, soyadi, cinsiyeti, sinif_kodu) values (98, 'Fuat', 'Ocak', 'e', '11blsa');
Kayıt Güncelleme (update) Tabloya kaydedilmi ş bir bilgiyi güncellemek yani düzeltmek için ş u SQL komutu kullanılır: update tablo_adi set alan1=de ğ er1, alan2=de ğ er2,... where ko ş ul; Belirtilen ko ş ula uyan kayıtların set ifadesinden sonra belirtilen alanları güncelle ş tirilir. Burada yazılan ko ş ula kar ş ılık tablodan hangi kayıtların etkilenece ğ ine dikkat edilmelidir. E ğ er kayıt belirtilmezse tüm kayıtlar etkilenir.
Kayıt Güncelleme (update) Genelde güncelle ş tirmeler tek bir kayıt üzerinde yapılır. Dolayısıyla güncellenecek kaydı ifade etmek için ko ş ulda birincil anahtar alanı kullanılır. Çünkü birincil anahtara kar ş ılık tabloda sadece bir kayıt olabilir. Örne ğ in; ogrenci_no alanı birincil anahtar ise where ogrenci_no=71; ifadesine kar ş ılık tabloda tek bir kayıt vardır. Ancak where adi='Ahmet'; gibi bir ko ş ula kar ş ılık tabloda bir çok kayıt olabilir. Özetle güncellenecek kayıt(lar)ı ifade eden ko ş ulu do ğ ru belirtmeye dikkat edilmelidir.
Kayıt Güncelleme (update) A ş a ğ ıdaki ogrenciler tablosunda; ogrenci_noadisoyadicinsiyetisinif_kodu 54AhmetÖzdemireBlp-1 67HaticeErenkBlp-2 18MahirSereneBlp-1
Kayıt Güncelleme (update) 1) 54 nolu ö ğ rencinin adını Ay ş e cinsiyetini k ve sınıfını Blp-2 olarak de ğ i ş tirelim. update ogrenciler set adi='Ay ş e', cinsiyeti='k', sinif_kodu=‘Blp-2' where ogrenci_no=54; 2) 67 nolu ö ğ rencinin numarasını 111 olarak de ğ i ş tirelim. update ogrenciler set ogrenci_no=111 where ogrenci_no=67;
Kayıt Silme (delete) Eklenmi ş kayıt(lar)ı silmek ş u SQL komutu kullanılır: delete from tablo_adi where ko ş ul; Belirtilen ko ş ula uyan kayıtlar silinir. Burada belirtilen ko ş ula kar ş ılık hangi kayıtların silinece ğ ine dikkat ediniz. E ğ er tek bir kayıt silmek istiyorsanız o kaydı ifade eden benzersiz de ğ eri yani birincil anahtarı ko ş ulda kullanılmalıdır.
Kayıt Silme (delete) ogrenci_noadisoyadicinsiyetisinif_kodu 54AhmetÖzdemireBlp-1 67HaticeErenkBlp-2 18MahirSereneBlp-1
Kayıt Silme (delete) 1) 18 nolu ö ğ renciyi silelim. delete from ogrenciler where ogrenci_no=18; 2)Blp-1 sınıfındaki tüm erkek ö ğ rencileri silelim. delete from ogrenciler where sinif_kodu=‘Blp-1' and cinsiyeti='e';
Kayıt Sorgulama (select) İ stenilen kayıtları tablolardan çekip ekranda göstermek için yani sorgulama yapmak için a ş a ğ ıdaki SQL komutu kullanılır. select alan1, alan2,... from tablo_adi1, tablo_adi2,... where ko ş ul; Buradaki select ile from arasındaki alan1, alan2,.... ifadesi sorgulama sonucunda ekranda görünmesini istedi ğ imiz alanlardır. E ğ er kayıtlara ait tüm alanları ekranda görmek isterseniz burada yıldız (*) i ş aretini kullanmalısınız. from' dan sonra ise sorgulamanın yapıldı ğ ı tabloların adları sırasıyla yazılır. Son olarak da where ifadesinden sonra ko ş ul(lar) belirtilir.
Kayıt Sorgulama (select) Örnek: ogrenciler tablosundaki tüm kayıtları ve bunların tüm alanlarını ekranda gösterelim. select * from ogrenciler; Burada tüm kayıtları görmek istedi ğ imiz için herhangi bir ko ş ul belirtmedik. Dolayısıyla ogrenciler tablosundaki tüm kayıtlar çekildi. Yıldız (*) ifadesini kullanarak da çekilen tüm kayıtların bütün alanlarını ekranda göstermi ş olduk.
Kayıt Sorgulama (select) ogrenciler tablosundaki tüm erkek ö ğ rencilerin ekranda tüm bilgilerini gösterelim. Select * from ogrenciler where cinsiyeti='e'; ogrenciler tablosundaki Blp-1 sınıfındaki tüm kız ö ğ rencilerin ekranda tüm bilgilerini gösterelim. select * from ogrenciler where cinsiyeti='k' and sinif_kodu=‘Blp-1'; notlar tablosunda geçer not alan ö ğ rencileri listeleyelim. select * from notlar where notu>=45;
Kayıt Arama (like) Tablolarda kayıt arama esasında bir sorgulamadır. Sorguda where ifadesinden sonra belirtilen alanlarda belirtilen de ğ erin olup olmadı ğ ına like ifadesiyle bakılır. Kullanımı a ş a ğ ıdaki gibidir. select alan1, alan2,... from tablo_adi where alan like 'aranan'; Burada aranan de ğ erin sa ğ ına % i ş areti konulursa (aranan%) aranan kelime ile ba ş layan, soluna % i ş areti konulursa (%aranan) aranan kelime ile biten, her iki tarafına % i ş areti konulursa (%aranan%) içerisinde aranan kelimesi geçen kayıtlar anlamına gelmektedir.
Kayıt Arama (like) adi like 'A%' > Adı A ile ba ş layanlar adi like '%a' > Adı a ile bitenler adi like '%a%' > Adında a harfi bulunanlar Mayıs 2010 tarihinde giri ş yapmı ş kullanıcıların ad, soyadı, mail ve giri ş tarihlerini ekranda gösterelim. select adi, soyadi, , son_giris_tarihi from uyeler where son_giris_tarihi like ' %';
Kayıt Sıralama (order by) Yapılan sorgulama sonucundan listelenen kayıtları istenilen alana göre sıralamak için a ş a ğ ıdaki SQL komutu kullanılır: select alan1, alan2,.... from tablo_adi where ko ş ul order by alan siralama_türü; order by ifadesiyle sıralama yapılaca ğ ı belirtildikten sonra sıralamanın hangi alana göre yapılaca ğ ı belirtilmi ş tir. Sıralama türü olarak asc (artan, a-z, 0-9) yadadesc (azalan, z-a, 9-0) kullanılır. E ğ er hiçbir sıralama türü belirtilmezse varsayılan olarak artan sıralama yapılır. Burada where $ko ş ul ifadesi kullanılmak zorunda de ğ ildir. Kullanılacaksa order by ifadesinden önce kullanılmalıdır.
Kayıt Sıralama (order by) Tüm ö ğ rencileri numaralarına göre artan bir ş ekilde sıralayalım. Select * from ogrenciler order by ogrenci_no asc; Sadece erkek ö ğ rencileri adlarına göre artan sıralayalım. select * from ogrenciler where cinsiyeti='e' order by adi asc;
SQL Fonksiyonları Tablolarda bazı de ğ erleri hesaplamak yada bulmak için hazır SQL fonksiyonları kullanılır. Bunların ba ş lıcaları ş unlardır: count (alan) > Belirtilen alandaki kayıt sayısını bulur. min(alan) > Belirtilen alandaki en küçük de ğ eri bulur. max(alan) > Belirtilen alandaki en büyük de ğ eri bulur. avg(alan) > Belirtelen alandaki de ğ erlerin ortalamasını bulur. sum(alan) > Belirtilen alandaki de ğ erlerin toplamını bulur. Bu fonksiyonlar kullanıldı ğ ında geriye dönen de ğ er tektir. Tek satırlı, tek sütunlu yani tek hücreli bir tablo döner. Bu tabloda sütun adı olarak istedi ğ imiz bir adı as sutun_adi ifadesiyle kullanabiliriz.
SQL Fonksiyonları 1) count(alan) Belirtilen alandaki kayıt sayısını bulur. Kullanımı ş öyledir: select count(alan) as sutun_adi from tablo_adi; Örnek: ogrenciler tablosunda kaç ö ğ renci oldu ğ unu bulalım. select count(ogrenci_no) as mevcut from ogrenciler; Örnek: Blp-1 sınıfında kaç ö ğ renci oldu ğ unu bulalım. select count(ogrenci_no) as mevcut from ogrenciler where sinif_kodu=‘Blp-1';
SQL Fonksiyonları 2) min(alan) Belirtilen alandaki en küçük de ğ eri bulur. Kullanımı ş öyledir: select min(alan) as sutun_adi from tablo_adi; Örnek: notlar tablosundaki en küçük notu bulalım. select min(notu) as enkucuk from notlar; Örnek: mat dersinden alınan en küçük notu bulalım. select min(notu) as enkucuk from notlar where ders_kodu='mat'; Örnek: 33 nolu ö ğ rencinin almı ş oldu ğ u en küçük notu bulalım. select min(notu) as enkucuk from notlar where ogrenci_no=33;
SQL Fonksiyonları 3) max(alan) Belirtilen alandaki en büyük de ğ eri bulur. Kullanımı ş öyledir: select max(alan) as sutun_adi from tablo_adi; Örnek: notlar tablosundaki en büyük notu bulalım. select max(notu) as enbuyuk from notlar; Örnek: geo dersinden alınan en büyük notu bulalım. select max(notu) as enbuyuk from notlar where ders_kodu='geo'; Örnek: 59 nolu ö ğ rencinin almı ş oldu ğ u en büyük notu bulalım. select max(notu) as enbuyuk from notlar where ogrenci_no=59;