1 PHP ile Veritabanı İşlemleri Yaptığımız web sitelerinin daha kullanışlı olması için veritabanı sistemleri ile bağlantı kurup ihtiyaca göre verileri okuyup yazmasını isteriz. 1.1 Veritabanı Nedir? Veritabanı düzenli bilgiler topluluğudur. Bilgisayar terminolojisinde, sistematik erişim imkânı olan, yönetilebilir, güncellenebilir, taşınabilir, birbirleri arasında tanımlı ilişkiler bulunabilen bilgiler kümesidir. Bir başka tanımı da, bir bilgisayarda sistematik şekilde saklanmış, programlarca işlenebilecek veri yığınıdır. Bir veritabanı adından da anlaşılacağı gibi bilgilerin depolandığı hiyerarşik bir yapıdır. Biz web üzerinde kullanıcı adı, şifresi, e-posta adresi gibi bilgileri bu veri tabanlarında saklarız. Aynı bilgileri bir dosyaya yazıp gerektiğinde dosyayı açıp bilgileri okutmak da bir çözüm gibi görünse de bu işlem hem daha karmaşık ve zahmetli hem de daha yavaştır. Birçok veritabanı yönetim sistemi mevcuttur (MySQL, PostgreeSQL, Oracle, DB2, SQL Server). Biz uygulamalarımızda MySQL veritabanı sistemini kullanacağız. 1.2 Neden MySQL? MySQL, altı milyondan fazla sistemde yüklü bulunan çoklu iş parçacıklı (multi-threaded), çok kullanıcılı (multi-user), hızlı ve sağlam (robust) bir veritabanı yönetim sistemidir. UNIX, OS/2 ve Windows platformları için ücretsiz dağıtılmakla birlikte ticari lisans kullanmak isteyenler için de ücretli bir lisans seçeneği de mevcuttur. Linux altında daha hızlı bir performans sergilemektedir. Kaynak kodu açık olan MySQL'in pek çok platform için çalıştırılabilir ikilik kod halindeki indirilebilir sürümleri de mevcuttur. Ayrıca ODBC sürücüleri de bulunduğu için birçok geliştirme platformunda rahatlıkla kullanılabilir. 1
MySQL in Avantajları: İnternet Programcılığı Özellikle internet ortamında önem kazanan, çok esnek ve güçlü bir kullanıcı erişim kısıtlama/yetkilendirme sistemine sahiptir. Bütün işletim sistemlerinde çalışır. 60000'in üzerinde tablo, 5 milyarın üzerinde satır ile çalıştırabilmektedir. Performansı yüksektir. Transaction ve/ya atomik işlem kullanan çeşitli tablo tiplerini desteklemektedir. Düşük maliyetldir. Yapılandırma ve öğrenim Kolaylığı. Taşınabilirlik. Kaynak kodu açıktır. Geniş destek hizmeti mevcuttur. 1.3 MySQL in Desteklediği Veritabanı Nesneleri Tables (Tablo) Views (Görüntü) (Görüntüleme) Procedures (Prosedür/Yordam) Triggers Cursors 1.4 MySQL Tablo Türleri InnoDB ve MyISAM MySQL veritabanı depolama motorlarıdır. Veri yazma, okuma ve saklama işlemini yaparlar. MySQL varsayılan depolama motoru olarak MyISAM kullanır (MySQL 3.23 ve sonraki versiyonlarda). InnoDB: MySQL AB tarafından dağıtılan tüm paketlerde yer alan standart MySQL veri tabanı motorudur. Sistemi diğer kayıt motorlarından ayıran en önemli özellik ACID uyumlu olması, aktarım ve yabancı anahtar desteği sunmasıdır. Eğer bir veri yazılırken hata oluşması durumunda (rollback) işlemi geri almak istiyorsak InnoDB motorunu kullanmamız gerekir. 2
MyISAM: MyISAM, MySQL in en eski veritabanı depolama motorudur. Standart depolama motoru olarak kabul edilir. Tablolar, fiziksel diskin üç ayrı konumunda tutulur. Tablo başına 64 indeks oluşturulabilir. Foreign Key kullanımını desteklememektedir. 1.5 PDO: PHP Data Object PHP nin eski versiyonlarında veritabanı bağlantısı için mysql_conenct() kullanılmakta idi. Fakat PHP 5.1 den sonra PDO (PHP Data Objects) sınıfları kullanılmaktadır. PDO, veritabanları için daha fazla esneklik sağlayan nesneye dayalı programlama imkânları sunmaktadır. PHP nin PDO yu kullanabilmesi için php.ini dosyasında php_pdo_mysql.dll ve php_pdo_sqlite.dll extension larının önündeki # işaretlerinin kaldırılmış olması gerekmektedir. Şekil. php.ini dosyası 1.6 PDO nun Desteklediği Veritabanı Sistemleri PDO, birçok farklı veritabanı yönetim sistemine bağlanmak için tek düzenli bir arabirim sunmaktadır. PDO ile PHP kodları ile sadece bağlantı arabirimini değiştirerek birçok veritabanı sistemi ile çalışma imkânı ortaya çıkmıştır. Böylece programcı her veritabanı için ayrı ayrı kod yazma zahmetinden kurtulmuş olur. 3
Aşağıdaki veritabanı sürücüleri PDO tarafından desteklenmektedir. 4
2 PHP ile Örnek Veritabanı Uygulaması Örneğimizde bir üye kayıt uygulaması gerçekleştireceğiz. Uygulamada, kayıt ekleme, arama, listeleme, güncelleme, silme işlemleri gerçekleştirilecektir. PHP uygulamasına geçmeden önce PHPMyAdmin i kullanarak veritabanını ve tabloyu oluşturalım. Sunucu üzerindeki PHPMyAdmin i açmak için http://10.79.0.110/phpmyadmin/ adresine girin. Gelen Oturum Açma ekranda Kullanıcı Adı, Parola olarak öğrenci numaranızı girin. 1801 Öğrenci Numarası ve Parola girildikten sonra her kullanıcı için kendi veritabanı şeması açılacaktır. Kullanıcılar tablolarını kendi veritabanında oluşturacak. 5
Örneğin Öğr. Numarası 1801 olan bir kullanıcı için oluşturulan veritabanı şemasının adı: 1801_db olacaktır.. Bu aşamada veri tabanındaki tablolar oluşturulacak. Bunun için iki yöntem mevcuttur. Birinci Yöntem Yapı (Structure) sekmesinde Tablo Oluştur (Create Table) bölümü kullanılır. Git (Go) butonuna tıkladıktan sonra açılacak formda alan adları ve özellikleri girilir. 6
Birincil Anahtar ve Auto Increment Birincil Anahtar (Primary Key) olacak alan Için Index sütununda PRIMARY seçeneği aktif hale getirilir. Alan, Otomatik Artan olacaksa A_I (AUTO INCREMENT) seçili hale getirilir. Kaydet butonuna tıklandıktan sonra tablo oluşturulacaktır. İkinci Yöntem İkinci yöntemde phpmyadmin de SQL sekmesine aşağıdaki kodlar yazılarak uyeler tablosu oluşturulur. 7
CREATE TABLE `uyeler` ( `UID` int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY, `Ad` varchar(24), `Soyad` varchar(24), `Email` varchar(254), `Parola` varchar(254), `UTarihi` datetime, `Yetki` int(11) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; UID alanı Primary Key (Birincil Anahtar) ve Auto Increment olarak belirlenmiştir. Yukarıdaki SQL ifadeleri ile 1801_db veritabanı içerisinde üyeler adlı tablo oluşturulur. Artık tablo oluşturulmuştur. Listeme amacıyla şimdilik PHPMyAdmin in SQL penceresinden tabloya örnek birkaç kayıt girelim. Kayıt ekleme, arama, silme, güncelleme gibi işlemler PHP dili kullanılarak Web sayfaları üzerinden yapılacaktır. 8
Kayır Eklemek için aşağıdaki SQL ifadesi kullanılır. 1. kayıt için: INSERT INTO `uyeler`(`ad`, `Soyad`, `Email`, `Parola`, `UTarihi`, `Yetki`) VALUES ('SERKAN','AKSU','aksuse@gmail.com','sa1234',NOW(),10); 2. kayıt için: INSERT INTO `uyeler`(`ad`, `Soyad`, `Email`, `Parola`, `UTarihi`, `Yetki`) VALUES ('ALİ','KARA','alikara@gmail.com','ak1234',NOW(),10); Bu aşamadan sonra PHP kodları ile MySQL veritabanına bağlanıp dinamik web uygulamalarımızı geliştirebiliriz. Veritabanı işlemleri yapılacak her sayfada MySQL Veritabanı Yönetcisi ne ve oluşturulan veritabanı şemasına bir bağlantı kurulması gerekmektedir. Bu amaçla dbconn.php adlı bir PHP sayfası oluşturalım ve bu sayfayı her sayfamızın başına include edelim. Bir PDO sınıfı tanımlanırken bir DSN Data Source Name ile belirtilir. Hangi veritabanı sürücüsüne bağlanılacağı ve hangi veritabanının kullanılacağı DSN ile ifade edilmektedir. Ayrıca veritabanı kullanıcı adı ve parola bilgilerinin de girilmesi gerekmektedir. Örnek bağlantıda Sunucu : localhost (web sitesinin bulunduğu sunucu) Veritabanı : 1801_db Kulllanıcı Adı : 1801 Parola : 1801 olarak belirlenmiştir. Siz 1801 yerine kendi öğrenci numaranızı yazın. 9
dbconn.php dosyası 2.1 Kayıt Listeleme Daha önce oluşturduğumuz uyeler tablosundaki kayıtları listelemek için aşağıdaki PHP kodları kullanılır. Eğer kayırlar sayfada listeleniyorsa veritabanı bağlantısı çalışıyor demektir. Böylece Gerçek bir dinamik web uygulamasına ilk adımımızı atmış olduk 10