Ubuntu LAMP Rehberi
Bu yazıda Ubuntu’da adım adım LAMP sunucusunu nasıl kuracağımızı ve konfigüre edeceğimizi anlatacağım. LAMP kelimesinin açılımı Linux, Apache, MySQL ve PHP olarak kabul görse de, şu anki durumda MySQL yerine PostgreSQL’i ve PHP yerine Perl ile Python’ı da ekleyebiliriz. Kendi bilgisayarınıza LAMP sunucusu kurarak projelerinizi lokal olarak geliştirebilir ve web sunucunuza gönderebilirsiniz. İsterseniz kendi bilgisayarınızı hem web yazılımı geliştirme için hem de web sunucusu olarak da kullanabilirsiniz.
MySQLCevir Sınıfı
Mysql’de bulunan verileri farklı formatlara çevirmek veya farklı formatlardaki verileri mysql’e yüklemek istediğinizde artık elinizin altında kullanışlı bir sınıf bulunacak: mysqlcevir sınıfı!

Sınıfın özelliklerini kısaca şöyle sayabiliriz:
1- Mysqlden çektiğiniz veriyi xml’e çevirir.
2- Mysql’den çektiğiniz veriyi json formatına çevirir.
3- xml formatındaki veriyi Mysql’e geri yükler.
4- json formatındaki veriyi mysql’e geri yükler.
MySQL’de CASE Kullanımı (CASE – WHEN – THEN – END)
Uzun zamandır MySQL hakkında yazı yazmaya fırsatım olmadı, ama şimdi güzel bir yazı ile kaldığımız yerden devam edelim.
Genellikle bir programlama dili öğretilirken “Merhaba Dünya” yazdırmak ile başlanılır. Bunun aslında programlama ile pek alakası yoktur, dile giriş açısından bir önem taşımaktadır sadece. Algoritma oluşturmanın ilk tadını aldığımız yer if-else cümlelerini oluşturmaya başladığımız yerdir. Bir program yazmanın ilk tadı bu noktada anlaşılmaya başlar.

MySQL’de de buna benzer şekilde if-else cümleleri oluşturabilir, sorgumuzu, dönen sonuçlara göre daha farklı şekillendirebiliriz.
CASE kullanımı
MySQL’de CASE kullanım kuralı oldukça basittir. Şu şekilde gösterebiliriz:
SELECT alan1, alan2, CASE alan3 WHEN 'deger1' THEN 'deger1a' END FROM tablo
Bu basit kodun yaptığı iş oldukça okunabilir olması rağmen, CASE bloğunun ifade ettiğini PHP “if” ile şu şekilde gösterebiliriz:
if(alan3 == 'deger1') { echo 'deger1a'; }
Süslü parantezler yerine WHEN ve THEN kullanıyoruz.
Yukarıdaki örneği biraz daha geliştirebiliriz:
SELECT alan1, alan2, CASE alan3 WHEN 'deger1' THEN 'deger1a' WHEN 'deger2' THEN 'deger2a' WHEN 'deger3' THEN 'deger3a' ELSE 'ön tanımlı değer' END FROM tablo
Burada fazladan iki tane WHEN – THEN bloğu ve bir ELSE bloğu ekledik. Buradaki WHEN -ELSE kullanımı da PHP nin if-elseif-else bloğuna benzemektedir.
Bu örneklerden bir şey anlamak oldukça zor, zaten ben de sadece kullanım şeklini göstermek istedim
Bir sonraki başlık altında gerçek dünyaya dalıyoruz!
CASE kullanımı – Örnekler
Bir tablo üzerinde CASE kullanımına örnek verirsek daha iyi anlayabiliriz. kitaplar isimli tablomuz aşağıdaki gibi olsun:
| id | isim | yazar | yayınevi | stok | popularite |
| 1 | komplo teorileri | erol mütercimler | alfa | 120 | 7 |
| 2 | değişen dünya değişen dil | macit gökberk | yky | 45 | 3 |
| 3 | leyleklerin uçuşu | grange | doğan kitap | 10 | 8 |
| 4 | einstein evreninde zaman yolculuğu | richard gott | arkadaş | 45 | 5 |
| 5 | metal fırtına 3 | burak turna | profil | 300 | 7 |
| 6 | raslantı ve kaos | david ruelle | tübitak | 250 | 5 |
Tablonun son alanı kitapların popülaritesini göstermekte. (Tabii ki bana göre!) Bu kitap tablosunu sorgulayıp kullanıcıya kitapların popülaritesini gösteren bir program yazmış olalım. Sorgumuz bu şekilde olacaktır:
SELECT isim, popularite FROM kitaplar
Bu sorgu kitap ismi ve popülaritesini geri döndürecektir. Bu popülarite değerini daha sonra uygulamamızda kullanıyor olduğumuz varsayalım. Kullanıcıya sadece 5, 6, 7 gibi popülarite değerleri göstermek istemezsek PHP ile gelen değeri değiştireceğiz:
if($sorgu['popularite'] == 10) { $pop = 'Çok çok çok seviliyor'; } elseif ($sorgu['popularite'] == 9) { $pop = 'Herkes beğeniyor' } ... ... ...
Bunu MySQL’den dönen veriye uygulasak ne güzel olur değil mi?
İmdadımıza CASE yetişiyor:
SELECT isim, CASE popularite WHEN 10 THEN 'çok çok popüler' WHEN 9 THEN 'herkes beğeniyor' WHEN 8 THEN 'pek çok kişi okudu' WHEN 7 THEN 'Okuyan pek çok kişi beğendi' WHEN 6 THEN 'Belirli bir kitle gerçekten beğendi' WHEN 5 THEN 'Okumaya değer' ELSE 'Gözden kaçmış, okunmayı bekleyen bir kitap' END AS pop FROM kitaplar
Burada çok basit bir if-elseif-else benzeri bir blok kullandık. Biraz farklı gelebilecek bir nokta ise END kelimesinden sonra kullandığımız AS olabilir, bunu da daha önceki MySQL yazılarımızda anlatmıştık, MySQL kategorisindeki yazıları gözden geçirebilirsiniz…
Her bir durumu tek tek tanımlamak zor olabilir, bunun yerine karşılaştırma yapabiliriz, popülaritesi 8den büyükse popüler, 8-5 arasıysa okunmalı, 5den küçükse gözden kaçmış kitap diyebiliriz:
SELECT isim, popularite, CASE WHEN popularite >= 8 THEN 'Oldukça Popüler' WHEN popularite < 8 AND popularite >= 5 THEN 'Okunmalı' ELSE 'gözden kaçmış...' END AS pop FROM kitaplar
Bu sorguda iki önemli nota var: 1: CASE kelimesi alan isminden sora yazılır, karşılaştırma yaparken kullanabilmek için, yani “SELECT isim CASE popularite” değil de “SELECT isim, popularite CASE …” dedik.
2: Karşılaştırma yaparken aralık belirtmek için AND kullandık.
İç içe bloklar
PHP if-else çümlelerinde olduğu gibi iç içe CASE cümleleri kullanabiliriz. Aşağıdaki sorgu buna örnek olabilir:
SELECT isim, stok, popularite, CASE WHEN popularite >= 7 THEN CASE WHEN stok < 100 THEN 'Popüler bir kitap, her an bitebilir' ELSE 'Bir süre daha stoklarda bulunur...' END WHEN popularite < 5 THEN CASE WHEN stok > 100 THEN 'Elimizde kalmış, %90 indirim ile alabilirsiniz!' ELSE 'Uzun bir süre stoklarda bulunacaktır muhtemelen...' END END AS durum FROM kitaplar
Bu sorgudaki CASE bloğunun sonucu ‘durum’ sütunu olarak sonuç tablosuna eklenecektir.
Sonuç
Aslında CASE kullanımını öğrenmenin en iyi yolu deneme yanılmadır. En çok yapılan yanlışlar virgül koyma hatası veya karşılaştırma yapılacak tablonun CASE kelimesinden önce belirtilmemesidir. Bunlar da ancak deneme yanılma ile aşılabilecek hatalardır.
Bir sonraki MySQL yazısında görüşmek üzere…
MySQL sorgularında “AS” kullanımı
MySQL veritabanında tutacağınız verilerin sayısı arttıkça ilişkili veritabanına ihtiyacınız da zamanla artacaktır. Veritabanı tasarımınız yeterince iyiyse, veritabanı ne kadar şişerse şişsin, yine de satırların arasında kaybolmaz, istediğiniz veriyi kolaylıkla çekebilirsiniz.

Bu tür ilişkili veritabanı sorgularında bizim en büyük yardımcılarımızdan biri de “AS” komutudur. Bu yazıda da “as” komutunun kullanılışı üzerine tartışalım.
MySQL’de LIKE ve REGEXP Kullanımları
Veritabanının kullanımı genelde eldeki verilerin belli bir yerde tutulması, ihtiyaç duyulduğunuda ise belli koşullara göre çekilmesi şeklindedir. Bununla beraber ikinci sırayı ise arama cümlecikleri alır; belli bir kritere uyan verilerin veritabanından çekilmesi.

Bu ihtiyacı en güzel şekilde “LIKE” kelimesi karşılar. LIKE ve ardından gelen ‘%’ işareti ile kriterimizi belirtir ve verimizi çekeriz. Ancak ‘%’ işareti her zaman ihtiyacımızı karşılamayabilir, ama farklı koşullar için de farklı alternatifler bulunmaktadır.
MySQL’de Transaction ve PHP ile kullanımı
MySQL’de sorgularımızı yazarken gün olur, aynı anda iki sorgunun çalışması gerekebilir, iki sorgunun da doğru sonuç döndürmesi gerekmektedir uygulamamız açısından. Örnek olarak iki banka hesabı arasındaki para transferlerini gösterebiliriz, birinci kişinin hesabından para silindikten sonra ikinci kişinin hesabına para yatmamışsa, pek de hoş durumlarla karşılaşmazsınız.

Her iki sorgunun da güvenle gerçekleştiğinden emin olabilmek için “Transaction” cümleleri kullanırız. Bu yazımızda da bu cümleleri nasıl oluşturacağımızı ve PHP uygulamalarında nasıl kullanacağımızı tartışalım.
MySQL’de “join” kullanımı
Veritabanları oluşturulurken asıl düşünülen her zaman dataların okunmasının ne kadar kolay olacağıdır. Tablolar ve veriler buna göre organize edilir, genellikle bu fikir doğrultusunda hareket edilir.

İlişkili veritabanları da okuma işlemini kolaylaştırmak düşüncesi ile oluşturulurlar. Ve iş bunları okumaya geldiğinde yardımımıza “JOIN” yetişir.
Mysql’de indexleme
Yazdığımız bir veritabanı-PHP uygulamasının ardından genelde sorgularımız hızlı çalışır, çünkü veritabanımız henüz yenidir ve çok fazla veri yoktur, MYSQL sunucusunun istenen veriyi bulmak için tüm tabloyu tarayıp sonucu geri döndürmesi fazla uzun sürmez.

Ancak zamanla, veritabanımıza yeni veriler eklendikçe sorgularımızın sonuçlarının yavaş döndüğünü fark ederiz. Bu durumda yapılabileceklerden biri ve aynı zamanda en etkilisi indexleme yapmaktır.
Mysql motorları
Hepimizin bildiği gibi veritabanları, yazdığımız uygulamaların çok önemli bir parçasıdır. Verileri orada saklarız, gerektiğinde oradan çekip gösteririz, ayrıca güvenlidirler, oturum yönetiminde bile veritabanlarını kullanabiliriz.
Uygulamalarımızın önemli bir parçası olan veritabanlarını oluştururken dikkat etmemiz gereken noktaların başında ise kullanılacak veritabanı motoru gelir. Bu yazımızda PHP uygulamalarında sıklıkla kullanılan bir veritabanı olan MySQL’in sunduğu veritabanı motorlarını kısaca değerlendirmeye çalışalım.
Komutlar ile Veritabanı ve Tablo Oluşturmak
MySQL veri tabanını kullanmak için genelde phpmyadmin programından yararlanırız. Veritabanı oluşturmak ve tablolarımızı düzenlemek için hiç bir kod yazmadan görsel olarak kullanabiliriz. Ancak bazı durumlarda phpmyadmin kullanmamamız gerekebilir, sistemde mevcut değildir yada bir üyenin myadmin’e erişimi yoktur. İşte böyle bir durumda veritabanı ve tabloları phpmyadmin kullanmadan basit komutlar ile oluşturabiliriz.
Bu örnekte basit bir şekilde cdlerimizin kayıtlarını bir veri tabanında tutmak istediğimizi varsayalım. Sonuçta oluşturacağımız tablo şu şekilde gözükecek:
| id | album_adi | sanatci_adi | album_yili |
| veri… | veri… | veri… | veri… |
| veri… | veri… | veri… | veri… |
| veri… | veri… | veri… | veri… |
Arama
E-Posta Aboneliği
RSS Aboneliği
En Çok Yorumlanan Yazılar
- Blogger’da “devamını oku” bağlantısı (21)
- Ajax ile dinamik listeleme (21)
- MySQL’de Transaction ve PHP ile kullanımı (16)
- PHP ile sınırsız alt kategori mantığı (14)
- Kullanıcı dostu url hazırlamak (12)
- PHP’nin (muhtemelen) az bilinen 10 özelliği (12)
- Kullandığınız programlama dili ne kadar popüler? (12)
- MySQL’de “join” kullanımı (11)
- .htaccess konuları [Giriş] (11)
- Blogger’da arama kutusu ekleme (10)
Etiketler
Son Yorumlar
- isa engiz: Yazı için teşekkürler. sabit ip 2.75 tl. bu ücreti verip kendi web sunucumuzu kurabiliriz… En yakın...
- osman: Yazı için teşekkürler. Pardus projesinin Türkiye için çok önemli olduğunu düşünüyorum. Ancak yazıda da...
- Mustinet: siblings kullanarak da yazılabilir. Teşekkürler
- is: CSS kullanmadan sadece HTML kodlarıyla yanyana iki sütun (tablo kullanmadan) oluşturulabilir mi?
- Doğan Yılmaz: verdiğiniz bilgiler için çok ama çok teşekkür ederim. artık sıkı bir takipçiniz olmaya karar verdim
24 / Şubat / 2010
Osman Akşit
