Gönderen Konu: PHP İle Veritabanı İşlemleri  (Okunma sayısı 2919 defa)

0 Üye ve 1 Ziyaretçi konuyu incelemekte.

Çevrimdışı Muzy42

  • Sanalpusula.Net
  • Site Yönetimi
  • *****
  • İleti: 1558
  • Konu Sayısı: 888
  • Toplam Puanı: 116
  • Cinsiyet: Bay
  • Eğitim Şart!!!
    • Sanalpusula.Net

PHP İle Veritabanı İşlemleri
« : 29.04.2009-20:17:39 »
          

PHP İle Veritabanı İşlemleri

PHP’nin en güçlü yönlerinden birisi birçok veritabanına erişebilmesidir. Veritabanlarına erişirken, doğrudan o veritabanları için yazılmış fonksiyonlar kullanıldığından, çok güçlü ve etkin bir kullanım mümkün olmaktadır. Bunun yanında ODBC için de sürücüler mevcuttur. PHP’nin veritabanı erişim fonksiyonlarının güçlü olmasının nedeni, veritabanlarının kendi kütüphaneleri ile gelen güçlü kodların, doğrudan PHP içerisinde derlenmesinden kaynaklanmaktadır. ODBC ise, her türlü veritabanına erişmek için kullanılan bir yöntemdir.

MySQL veritabanı

Yapısal Sorgu Dili (Structured Query Language, SQL) veritabanı endüstrisinin standart dilidir; fakat HTML konusunda farklı firmaların sadece kendi tarayıcılarının tanıdığı türden etiketler geliştirmeleri gibi, SQL alanında da farklı firmaların ekleri ve dilde yaptıkları değişiklikler vardır. MySQL sunucuda çalışır ve arzu eden programa, bildireceği (ve erişim hakkı bulunan) veritabanı dosyasından veri çekerek, sunar.

PHP’nin yaygınlaşmasındaki kuşkusuz en büyük yardımcılarından biri de MySQL oldu. Windows ve Unix versiyonları ücretsiz olarak dağıtılan MySQL’in PHP ile beraber gelişmesi sayesinde hem PHP hem de MySQL karlı çıktılar. Gelişmiş veritabanı sistemlerinde olan ilişkisel veritabanı mantığıyla geliştirilen MySQL, çoklu bağlantı desteği ve performansıyla uzunca süreden beri internette adını duyurmayı başardı. Kısa bir süre önce GPL lisansıyla kaynak kodları açıklanan MySQL’in PHP ile stratejik işbirliği sayesinde PHP4 ve MySQL birlikte diğer veritabanı ve dil ikililerine karşı konulamaz performans üstünlüğü sağladı.

PHP’nin, MySQL ve Apache’yle birlikte derlenerek kullanıldığı sistemlerde veritabanı ve web sunucu arasında kurulan kalıcı bağlantılar (persistent connection) sayesinde web sunucu ve veritabanı tek bir yazılımmış gibi çalışabilir. Bu sayede çalışan iki ayrı yazılıma göre %400’lere varan performans üstünlüğü de sağlanmış olu. Kısa bir süre önce internette dünyanın en çok kullandığı site olan “Yahoo!”da bazı bölümlerinde MySQL kullanmaya başlamıştır.
Bir veritabanında farklı sayıda tablolar olabilir. Bir veritabanı dosyasında yer alan tablolar sütunlar ve satırlardan oluşur. Veritabanına yazılacak veriler bu satır ve sütunların kesiştikleri yerlere (hücrelere) yazılır. Bir SQL veritabanı dosyasında her bir hücrenin ne tür veri kabul edeceği önceden belirlenir; dolayısıyla türü sayı olan verinin yazılacağı kutuya alfanümerik değer yazılamaz. MySQL’de sayısal verilerin türü INT, belirli bir sınıra kadar değişen sayıda karakterden oluşacak verilerin türü de VARCHAR olarak belirlenir .

SQL komutları

PHP ile herhangi bir veritabanını kullanırken bilinmesi gereken en önemli ayrıntı SQL adı verilen veritabanı yönetim ve sorgulama dilidir. Bu dilin detayları hakkında bilgi sahibi olunarak veritabanını performanslı ve hızlı şekilde kullanabilmek mümkün olur. Çoğu zaman orta derecede SQL kullanılan sitelerde performans kaybı ve gereksiz sorgularla karşılaşılır. Veritabanından sonucu tek sorguda çekmekle iki sorguda çekmek arasında oldukça büyük performans kaybı oluşacaktır. Ayrıca SQL kullanılarak yapılan işlemleri PHP İle yapmak güç kaybına da yol açar. Öğrenci sınav sonuçlarının bulunduğu bir tablo göz önünde bulundurulduğunda birinci, ikinci ve üçüncü sınav sonuçlarının PHP’de toplanmasıyla performans ve hafıza kaybına yol açılır. SQL’de sınav sonuçlarının toplanması her zaman için daha hızlı olur. Örneğin;

select sinav1+sinav2+sinav3 as sinavsonuc from sinavlar

Bu SQL komutuyla üç sınavın bulunduğu sınav sonuçları “sinavlar” tablosundan “as” komutuyla belirtilen “sinavsonuc” adında bir alanla çekilebilir. “select” komutu sonuç çekmek için kullanılır. “from” komutuyla sonuçların çekileceği tablo adı belirtilir. “select”ten sonra gelen isimler sonuçların çekileceği tablodaki alan adlarıdır. Eğer tablodaki tüm alanlar çekilmek isteniyorsa “select * from sinavlar” kullanılmalıdır. Sınav sonuçlarında en yüksek olan kişinin bulunması istendiğinde de “max()" komutu kullanılabilir. Örneğin;

select max(sinav1+sinav2+sinav3) as sinavsonuc from sinavlar

Bu sayede sınav sonuçlarında en iyi sonuç öğrenilmiş olur. Dikkat edilmesi gereken nokta, aynı sınav sonuç toplamına sahip birden fazla kişi olmasına rağmen sadece en yüksek toplamı elde eden ilk sonucun listeleneceğidir. En yüksek notu alan kişiden düşük alanlara doğru sıralanmak istendiğinde de “order by” komutu kullanılmalıdır.

select sinav1+sinav2+sinav3 as sinavsonuc from sinavlar order by sinavsonuc desc

Bu örneğin sonucunda ilk kişi en yüksek puanı alan kişi olacaktır. Birden çok aynı yükseklikte puan alan kişiler alfabetik sırada sıralanacaklardır. “order by” komutundan hemen sonra sonuçların sıralanacağı alan adı verilmelidir. “desc” komutu sayesinde de en yüksekten en düşüğe doğru sıralama yapılır. "desc" kullanılmazsa sıralama en azdan en çoğa doğru olur. Eğer sınav sonuçlarında en yüksek puanı alan 10 kişi belirlenmek isteniyorsa limit komutu kullanılabilir. Örneğin;

select sinav1+sinav2+sinav3 as sinavsonuc from sinavlar order by sinavsonuc desc limit 0,10

"limit" komutuyla belirtilen ilk sayı sıralamanın başlayacağı sayıdır. Yani sıfırıncı kayıttan itibaren 10 tane sonuç getirmek istendiğinde limit 0,10 kullanılır. Limit sonuç tablosunda gereksiz kayıt barındırılmak istenmediği durumlarda kullanışlı olur. PHP'de kullanılacağından fazla kaydı veritabanından çekmek hem boş hafıza miktarını azaltır hem de veritabanını gereksiz yere zorlamış olur.

Eğer sınav sonuçlarının ortalaması alınmak isteniyorsa avg() komutu kullanılır. Ortalaması alınmak istenen alan adı belirtilerek veritabanından ortalamalar kolaylıkla çekilebilir.

select avg(sinav1+sinav2+sinav3) as sinavsonuc from sinavlar

Eğer belli koşulların sağlanacağı sonuçlar tablodan çekilecekse "where" komutu kullanılır. Örneğin; sınav sonuçları toplamı 150 ve üzerinde kişiler seçilecekse,

select sinav1+sinav2+sinav3 as sinavsonuc from sinavlar where sinav1+sinav2+sinav3 > 150

sorgusu kullanılmalıdır. Birden çok koşul da sorgudan verilebilir. Eğer her sınavdan 50 ve üzeri almış kişiler seçilecekse,

select sinav1, sinav2, sinav3 from sinavlar where sinav1> 49 and sinav2>49 and sinav3>49

kullanılmalıdır. “and” komutuyla koşullar birbirleriyle “mantıksal ve” anlamında birleştirilir. Aynı şekilde “or” da kullanılarak “mantıksal veya” anlamında birleştirilir.

Sorgular daha da karmaşıklaştırılarak her sınavda sınav ortalamasını geçen kişilerin listesi gibi zor gözüken işlemler de SQL kullanılarak çekilebilir. Bu işlemlerin PHP’de yapılması her ne kadar kolay olsa da SQL’le veritabanından direkt verilerin formatlanarak çekilmesi işlemlerin hem kolay hem de hızlı yapılmasını sağlar .

MySQL`de kullanılan veri türleri
MySQL’de bir çok veri türü oluşturulabilir, ancak web programları açısından önemli olan bir kaçı ve özellikleri şöyle sıralanabilir:

INT: Tamsayı -2147483648'den 2147483647 kadar değişen diziye "signed" (işaretli), 0'dan 4294967295'e kadar değişenine de "unsigned" (işaretsiz) denir.
VARCHAR(n): n sayısını geçmemek şartıyla değişen boyutta karakter olabilir.
CHAR(n):   Kesinlikle n sayısı kadar karakter olabilir.
TEXT: En fazla 65535(2^16-1) karakter alabilen metin alanı.
MEDIUMTEXT: En fazla 16777215(2^24-1) karakter alabilen metin alanı.
DATE: 1000-01-01'den 9999-12-31'e kadar değişebilen tarih alanı.
TIMESTAMP: 1 Ocak 1970'den 18 Ocak 2038'e kadar olan ve Yıl+Ay+Gün+Saat+ Dakika +Saniye biçimindeki zaman bilgisi.


SanalPusula.Net


SanalPusula.Net - Etiketler
PHP İle Veritabanı İşlemleri,