5 Mayıs 2012 Cumartesi

PHP & PostgreSQL Database Bağlantısı Oluşturma ve Kurulum


PostgreSql, PostgreSQL Inc. şirketi tarafından desteklenen, açık kaynak kod uygulamalı bir veri tabanı sistemidir. Kullanıcı tanımlaması yapılabilen, SQL ile her türlü sorgulama desteği olan postgresql birçok yazılım dili ile uyum içinde çalışabilmektedir. C, C++, JAVA, PHP, PERL, .NET, PYHTON programlama dilleri bunların önemlileri olarak sıralanabilmektedir.

PostgreSQL, iyi performans veren, geniş özelliklere sahip ve güvenli bir veritabanı sistemidir. Ücretsiz ve açık kaynak olması tercih edilmesinin en büyük nedenleri olarak gösterilebilmektedir. Tüm Unix tabanlı işletim sistemlerinde çalışabilmektedir. Ayrıca Lunix, FreeBSD ve Windows işletim sistemlerinde de çalışmaktadır.

Bir yazılım uzmanı kendine, neden postgreSQL kullanmalıyım? diye bir soru sorarsa bunun cevabı, açık kaynak bir uygulama olması, güvenli, geniş bir geliştirici yazılımcı grubunun olması, birçok platformda ve değişik arayüzlerde çalışabilir olması ve diğer veritabanlarından daha geniş özelliklere sahip olması (MYSQL, SQLite, Access) gibi maddeler ile sıralanabilir. Ayrıca SQL işlemleri, phppgadmin üzerinden, SQL bilgisine gerek olmadan da yapılabilmektedir. Bu da büyük bir zaman avantajı sağlamaktadır.

PostgreSQL içerisindeki bir veritabanı üzerinde bulunan tablo, maksimum olarak 64 TB veri depolama kapasitesine sahiptir ki bu da bir tablo için oldukça büyük bir ölçüdür. Bu özellik neredeyse sınırsız satır (row) ölçüsü sunmaktadır. Durum böyle olunca sınırsız bir veritabanı depolama kapasitesinden bahsetmek pek de yanlış olmayacaktır.

POSTGRESQL PhpPgAdmin Kullanımı

Tanınmış birçok kurum ve kuruluşlar tarafından kullanılan bu sistemi kurabilmek için postgresql.org sitesinin download bölümünden gerekli programı, sahip olduğunuz işletim sistemine göre seçip bilgisayarınıza indirebilmektesiniz. İndirilen program çalıştırılıp kurulma işlemi gerçekleştirildikten sonra, herhangi bir internet tarayıcısına localhost:8080/phppgadmin yazıp, bu veritabanına bağlantının ilk adımını atmış olacaksınız. 
phppgadmin, sisteme ilk defa giriş ekran görüntüsü
Yukarıda görülen ekran görüntüsü, phppgadmin veritabanı sistemine, ilk girişi göstermektedir. Gerekli tanımlama işlemini gerçekleştirebilmek için kullanıcı adı postgres olarak, şifre bilgisi ise program kurulumu sırasında girilen şifre olarak belirlendikten sonra giriş yapılacak ve aşağıdaki görüntü elde edilecektir.
phppgadmin giriş sayfası
Yukarıdaki ekran görüntüsü elde edildikten sonra artık phppgadmin veritabanı kullanılmaya hazır bir sistem olarak beklemektedir. PostgreSQL’in en önemli özelliklerinden biri, phppgadmin üzerinden SQL sorguları yapılabildiği gibi, postgreSQL arayüzü üzerinden de işlem yapılabilmesidir. Zira tüm yetkiler düzenlenip tüm veritabanına bağlanılabilmektedir.
phppgadmin üzerinden yeni bir veritabanı yaratmak
Yukarıda görülen ekran görüntüsü phppgadmin üzerinden veritabanı oluşturma yolunu göstermektedir. Sol tarafta bulunan PostgreSQL ana veritabanına tıklandığında yukarıdaki görüntü elde edilecek ve Veritabanı yarat ibaresi ile de yeni bir veritabanı yaratılabilmektedir.

Biz phpservisi adında bir veritabanı oluşturalım. Fakat bunu phppgadmin üzerinden değil de postgreSQL arayüzü üzerinden oluşturalım. Zira SQL kullanarak uygulama yapmak her zaman daha büyük bir tecrübe kazanmaya ortam yaratacaktır.
postgreSQL üzerinden tablolara erişim
Yukarıda görüntülenmekte olan ekran çıktısı, postgreSQL arayüzüdür. Bu program sayesinde phppgadmin içerisindeki her türlü işlem yapılabilmekte ve veriler görüntülenebilmektedir.

Veritabanı üzerinde çalışmak için artık SQL kullanma zamanı geldi. Programın yukarısında görülen SQL ifadesi tıklanarak yeni bir tablo oluşturalım.
postgreSQL arayüzü üzerinden yeni bir tablo oluşturmak
Yukarıda görülen SQL kodları ve sonuç raporu görüntüsüdür. phpservisi adında, id ve konu sütunlarına sahip bir tablo oluşturulmuştur. phppgadmin sayfasına giriş yapılıp kontrol edildiğinde, veritabanı içerisinde phpservisi adında bir tablo oluşturulduğu görülecektir.

Bu oluşturulan tablo içerisine veri ekleme işlemi, bilindiği gibi SQL’in INSERT komutu ile yapılacaktır.
phpservisi tablosuna veri ekleme işlemi
Yukarıdaki işlem, phpservisi tablosuna PHP, HTML, AJAX, SQL sözcüklerini eklemeyi sağlamaktadır. Apache sunucusu çalıştırılıp phppgadmin incelendiğinde, phpservisi tablosu içerisine eklenen verilerin listelendiği  görülecektir.
phppgadmin üzerinden inceleme
Eklenen verileri postgreSQL arayüzü ile SQL’in SELECT komutu sayesinde listeleyelim:
postgreSQL arayüzü ile SELECT kullanımı
Yukarıda görüldüğü gibi, veriler SELECT vasıtasıyla listelenmektedir. SQL sorgulama işlemleri ile yapılabilen her olay postgreSQL arayüzü üzerinden uygulanabilmektedir. Bunun zaman kaybını önlemesi ve pratik olması oldukça önemli bir kolaylıktır.

Son olarak veri güncelleme ve silme işlemleri üzerinde duralım. Klasik UPDATE ve DELETE SQL komutları ile bu işlemleri gerçekleştirmek mümkün olacaktır.
postgreSQL üzerinden UPDATE işlemi
postgreSQL üzerinde DELETE işlemi

PHP ile PostgreSQL

Buraya kadar postgreSQL’in ne olduğunu, phppgadmin içeriğini ve ara yüz üzerinden yönetilmesini gördük. Fakat bütün bunları öğrendikten sonra bu performansı yüksek veritabanının PHP ile ilişkilendirmesinin nasıl olacağını bilmemek olmaz. Bu bölümde PHP’nin postgreSQL eklentisine ait fonksiyonları ve bunlar ile ilgili örnekleri inceleyeceğiz.


PHP ile postgreSQL Bağlantısı : pg_connect()

PHP programlama dili, postgreSQL veritabanı ile ilişkilendirilebilmesi için bir kütüphane barındırmaktadır. Bu kütüphanede ise çeşitli fonksiyonlar bulunmaktadır. pg_connect() fonksiyonu bunlardan biridir. PHP ile postgreSQL arasındaki bağlantıyı sağlamaktadır.

pg_connect() Yapısı


pg_connect(“host=host dbname=veritabanı port=port user=kullanıcıadı password=şifre”)



Bu fonksiyon yukarıdaki yapı çerçevesinde kullanılır. Parametrelerin her birini kullanma zorunluluğu yoktur. Gerekli bilgiler ışığında sadece veritabanı adı, ya da buna ek olarak kullanıcı adı, şifre vs gibi bilgiler de kullanılabilmektedir.
           
Bağlanılmak istenen server ve veritabanı bilgileri girilen pg_connect() Yapısı


pg_connect(“host=host dbname=veritabanı”)



Bağlanılmak istenen veritabanı bilgisi girilen pg_connect() Yapısı


pg_connect(“dbname=veritabanı”)



localhost üzerinden phpservisi isimli veritabanına 5432 port numarası ile kullanıcı adı php ve şifresi 12345 olan php bağlantısının pg_connect() Yapısı


pg_connect(“host=localhost dbname=phpservisi port=5432 user=php password=12345”)


PostgreSQL Bağlantısını Sonlandırmak : pg_close()

Daha önce yapılan PHP – PostgreSQL bağlantısını sonlandırmak için pg_close() fonksiyonu kullanılmaktadır.

pg_close() Yapısı


pg_close($baglanti)



Mevcut bir bağlantıyı sonlandırmak


<?php
$baglan = pg_connect("host=localhost port=5432 dbname=phpservisi");
echo "Bağlantı Mevcut";
if (pg_close($baglan) == 1) {
echo "Bağlantı Başarıyla Sonlandırıldı!";
} else {
echo "Bağlantı Sonlandırılamadı!";
}
?>



Diğer Fonksiyonlar

SQLite veritabanında gördüğümüz fonksiyonların MYSQL fonksiyonları ile ne derece benzerlik gösterdiğini hatırlayabiliriz. PostgreSQL’de de durum bundan farksızdır. İsim olarak benzerlik gösteren fonksiyonlar, işlev olarak da benzerlik göstermektedirler.


PostgreSQL ve MYSQL Fonksiyonlarının benzerlikleri

Mysql Fonksiyonları


PostgreSQL Fonksiyonları

mysql_connect()
pg_connect()
mysql_query()
pg_query()
mysql_result()
pg_result()
mysql_fetch_row()
pg_fetch_row()
mysql_fetch_array()
pg_fetch_array()


pg_query()

Bu fonksiyon, mysql_query() ya da sqlite_query() fonksiyonlarında olduğu gibi, SQL’den gelen sorguyu PHP ile ilişkilendirmektedir.

pg_query() Yapısı


$sonuc = pg_query($baglanti, $sql)



$sql ile döndürülmek istenen sorgu iletilemez ise hata mesajı gösterilecektir. Bu durumda pg_ErrorMessage() fonksiyonu işlem görebilmektedir.


Uygulama

Bir veritabanı ile yapılacak işlemler SQL sorgulama dilinin gücüyle orantılıdır. Bir veritabanı yaratılıp, içerisinde tablolar oluşturmak ve bu tabloların içerisine veri eklemek, silmek, güncellemek ya da görüntülemek gibi işlemleri gerçekleştirmek suretiyle, sonsuz işlem yapma imkanı vardır.

Bu uygulamada PHP ile PostreSQL arasındaki bağlantıyı sağladıktan sonra SQL’in gücü ile işlemler yapacağız.
Verilerin depolanacağı tabloyu veritabanında oluşturacak SQL kodunu yazalım.

veriler tablosu



CREATE TABLE veriler (
id integer primary key,
veri text not null
);


Oluşturulan veriler tablosuna veri eklemek için veriler.sql dosyasını içeri aktarmak gerekecektir. INSERT deyimi ile veri ekleme işlemi hazırlanmıştır.

veriler.sql



INSERT INTO veriler(id,veri) values('1','PHP');
INSERT INTO veriler(id,veri) values('2','ASP');
INSERT INTO veriler(id,veri) values('3','AJAX');
INSERT INTO veriler(id,veri) values('4','HTML');
INSERT INTO veriler(id,veri) values('5','SQL');


veriler tablosu


Uygulama : PostgreSQL veritabanına bağlantı kontrolu – kontrol.php


<?php
$baglanti = pg_connect("dbname=veritabanı user=postgres");
if($baglanti == 1 ) {
            echo "Bağlantı Başarıyla Yapıldı!";
}
else {
            echo "Bağlantı Sağlanamadı!";
}
?>



Uygulama : PostgreSQL veritabanından veri çekmek – veriler.php


<?php
$baglanti = pg_connect("dbname=veriler user=postgres");
$veriler = pg_query($baglanti,"SELECT * FROM veriler");
while(listele = pg_fetch_array($veriler)) {
            $id=$listele["id"];
            $veri=$listele["veri"];
            echo "id -> $veri";
}
?>



Görüldüğü gibi, MYSQL fonksiyonları ile yapılan işlemin benzer bir görüntüsü postgreSQL’de de uygulanabilmektedir. Birbirine çok benzeyen fonksiyon isimleri de, mysql bilgisi olan ve php ile etkileşim sağlamış deneyimli kullanıcılar için büyük kolaylık sağlamaktadır.

Bir sonraki yazıda görüşmek üzere!

3 Mayıs 2012 Perşembe

PHP & SQLite Database Bağlantısı Oluşturma ve Kurulum


 SQLite kavramı birçok kişi için pek de eski bir ifade sayılmaz. SQLite 2000’li yılların henüz başlarında Richard Hipp tarafından geliştirilmiştir. C programlama dili ile üretilmiş, sunucusuz çalışabilen ve tamamen işlemsel bir veritabanıdır. 


Açık kaynak kod platformu dahilinde en çok dağıtılan yazılımlardan biridir. Bunun en büyük sebepleri oldukça hızlı ve kullanımının basitçe olmasıdır. Konsol üzerinden bile SQL kabul edebilmektedir. PHP ile etkileşim hikayesi ise PHP 5.0 ‘dan itibaren başlamıştır. Hız ve performans olarak oldukça etkili olan SQLite, MYSQL ya da POSTGRESQL veritabanlarından daha hızlı olması açısından da büyük önem taşımaktadır. Veri depolama kapasitesi yadsınamaz. 2 TB -> 2048 GB veri depolayabilmektedir. Bugün çok büyük şirketler SQLite yazılımını kullanmaktadırlar. Google, Sun, Mozilla, Apple ve Adobe gibi kuruluşlar bunlara birer örnek olarak gösterilebilir.

Ayrıca SQLite, Birçok programlama dili ile de uyumlu olması açısından oldukça önemli bir veritabanı yazılımı olarak kabul edilmektedir. PHP, ASP, BASIC, C, C++, C#, JAVA, VISUAL BASIC, DELPHI, R, PERL ve PYHTON gibi programlama dilleri buna örnek gösterilebilmektedir.


SQLite Yapılandırması

Bu yazılımı kullanabilmek için öncelikle sqlite.org sitesine girip, download bölümünden SQLite yazılımını bilgisayarınıza indirmeniz gerekmektedir. İndirilen .zip formatlı dosya içerisinde bulunan sqlite3.exe tarzında bir program çalıştırılıp konsol görüntüsü elde edilmesi SQLite kullanımına başladığınızı gösterecektir.

SQLite veritabanı ekran çıktısı

SQLite Üzerinde İşlem Yapmak

SQLite üzerinde işlem yapabilmek, aslında SQL ile işlem yapmakla eş değerdir. Nitekim yapılan işlemler bilinen SQL işlemlerinden başka bir şey değildir. Veritabanı içerisinde tablo oluşturmak, veri eklemek, silmek, güncellemek ve görüntülemek işlemleri SQLite ile tamamen SQL uygulanarak yapılabilecek basit işlemler olarak nitelendirilebilmektedirler.

SQL konusunda, veritabanı üzerinde bir tablo oluşturma işlemini hatırlayabiliriz. Aynı işlemler aynı şekilde, fakat bu sefer SQLite üzerinde gerçekleşmektedir.

SQLite ile veritabanında bir tablo oluşturmak

Görüldüğü gibi CREATE TABLE ile veritabanında rehber adında bir tablo oluşturduk. id, isim ve telefon sütunları tasarladık. Daha sonra yaptığımız işlemi teyid etmek amacıyla SQLite konsol satırına .tables yazdık. SQLite komutlarından biri olan .tables, veritabanı içerisinde bulunan tabloların listesini veren bir komuttur. SQLite bunun gibi birçok komuta sahiptir. SQLite konsol satırına .help yazılıp enter tuşuna basıldığında, karşımıza bu komutlar ve işlevleri dizilecektir.

SQLite komutları - .help ekran görüntüsü

Bazı SQLite Komutları

SQLite Komutu


İşlevi

.tables
Veritabanı içerisinde bulunan tabloları listeler.
.databases
Veritabanlarını listeler.
.exit
SQLite konsol kapama işlemini gerçekleştirir.
.help
Yardım almak için mesaj sayfası açar.
.dump
Veritabanını dışarı aktarır.
.output filename
Veritabanında bulunan verileri .sql formatlı dosya haline getirmeye yarar. Depolama işlevi görür.


Veritabanı'na şekildeki gibi eklenen rehber tablosuna veri ekleyelim ve  bu eklenilen verileri ekrana yazdıralım.

rehber tablosuna veri ekleme ve ekrana yazdırma

Yukarıda görüldüğü gibi, id numarası 1 ve 2 olan isim, Gökhan Satman ve Mehmet Akif Birkan olan, telefonu 111 ve 222 olan iki veri, rehber tablosuna eklenmiştir. Sonra ise SELECT deyimi ile ekrana yazdırılmıştır. Buraya kadar veritabanında tablo oluşturma, tabloya veri ekleme, ekrana yazdırma gibi işlemler yaptık. Güncelleme ve silme işlemleri de bunları muhtemel takip edecek işlemlerdir. Hatırladığınız gibi silme işlemi DELETE, güncelleme işlemi ise UPDATE ile yapılmaktaydı.

rehber tablosundan veri silme ve veri güncelleme

Ekran çıktısı dikkatlice incelendiğinde, id numarası 2 olan verinin silindiği, id numarası 1 olan verinin ise isim sütununun güncellendiği görülecektir.


PHP ile SQLite Uyumu

PHP ile SQLite arasında bir uyum sorunu yaşanıyorsa, kullanılmakta olan PHP versiyonu muhtemelen 5.0 ’dan önceki bir versiyondur. Çünkü SQLite eklentisi PHP 5.0 versiyonundan itibaren ön tanımlı olarak etkin olmuştur.

Kullandığınız PHP versiyonunun, SQLite ile ilişkilendirilmiş olup olmadığını phpinfo() ile anlayabileceğinizi, daha önceki konulardan hareketle anlamak pek de zor olmayacaktır. Zira phpinfo(); olarak hazırlanan phpinfo.php sayfası kullanılmakta olan PHP versiyonu ile ilgili tüm gerekli bilgiyi ekranda listeleyecektir.

phpinfo.php


<?php
phpinfo();
?>




phpinfo.php sayfası ve SQLite ile uyum incelemesi

PHP ile SQLite Bağlantısı : sqlite_open()

PHP, geniş kütüphanesi sayesinde bir çok yazılım ile iç içe çalışabilmektedir. Bunlardan biri de hiç şüphe yok ki SQLite veritabanı motorudur. MYSQL ile oldukça benzerlik gösteren fonksiyonları ile biz programcıları hiç de zorlamayacak bir alt yapıya sahiptir.

MYSQL ile SQLite fonksiyonlarının karşılıkları

MYSQL Fonksiyonu


SQLite Fonksiyonu

mysql_connect
sqlite_open
mysql_query
sqlite_query
mysql_fetch_array
sqlite_fetch_array
mysql_fetch_row
sqlite_fetch_array
mysql_close
sqlite_close
mysql_num_rows
sqlite_num_rows
mysql_insert_id
sqlite_last_insert_rowid


MYSQL veritabanı ile SQLite arasındaki benzerlik doğal olarak veritabanı bağlantısı benzerliğine de yansımıştır. Zira mysql_connect() fonksiyonu ile sqlite_open() fonksiyonu benzer bir görev ve parametre topluluğu içermektedir.

PHP ile SQLite veritabanı bağlantısı


sqlite_open( bağlanılacak dosya, izin kipi, hata mesajı )



Yukarıdaki fonksiyon parametreleri incelendiğinde, bağlanılacak dosyanın (dosya.db) bir veritabanı, izin kipinin dosyaya erişim izin kipi olduğu ve hata mesajının da adından anlaşılacağı gibi bir hata mesajı olduğu söylenebilmektedir. İzin kipi 0666 sekizlik chmod değeri olarak ön tanımlıdır. Hata mesajı ise manuel bir değerdir.

sqlite_open() fonksiyonu ve parametreleri


$dosya = "c:/phpservisi.com/dosya.db";
$hata = "Bağlantı tanımlanamadı.";
sqlite_open($dosya, 0666, $hata);



SQLite konsol üzerinden tablo oluşturmak ya da diğer SQL işlemlerinin diğer veritabanı programlarındaki işlemler ile aynı olduğunu artık biliyoruz. Burada önemli olan konu, PHP ile bağlantının sağlanabilmesidir.

SQLite ile PHP


<?php
$baglan = sqlite_open("veritabanı adı", 0666, $hata_mesaj)
or die ("Bağlantı Sağlanamadı!");

$tablo_olustur = "CREATE TABLE rehber (
id integer primary key,
isim text not null,
telefon text not null
);";

$tablo_olustur_sonuc = sqlite_query($baglan, $tablo_olustur);

veri_gir1 = "INSERT INTO rehber(isim,telefon) values('Gökhan Satman','111');";
veri_gir2 = "INSERT INTO rehber(isim,telefon) values('Mehmet Akif Birkan','222');";

$veri_gir1_sonuc = sqlite_query($baglan, $veri_gir1);
$veri_gir2_sonuc = sqlite_query($baglan, $veri_gir2);

$veriler = sqlite_query($baglan, "SELECT * FROM rehber LIMIT 5");
while($listele = sqlite_fetch_array($veriler)) {
   $id = $listele["id"];
   $isim = $listele["isim"];
   $telefon = $listele["telefon"];

   echo "$id , $isim, $telefon";
}
?>


Yukarıda, daha önce de değinilen, SQLite bağlantısının yapılması işlemi gerçekleştirilmektedir. Bağlantının olumsuz olduğu durumda hata mesajı gösterilecektir.

$tablo_olustur = "CREATE TABLE rehber (
id integer primary key,
isim text not null,
telefon text not null
);";

$tablo_olustur_sonuc = sqlite_query($baglan, $tablo_olustur);

Yukarıda bulunan satırlar rehber isimli yeni bir tablo oluşturma işlemini gerçekleştirmektedir. mysql_query() fonksiyonu ile özdeş bir işlev gören sqlite_query() fonksiyonu sorguları PHP sunucuya göndermektedir.
Oluşturulan rehber isimli tablo, id, isim ve telefon sütunlarından oluşmaktadır.

veri_gir1 = "INSERT INTO rehber(isim,telefon) values('Gökhan Satman','111');";
veri_gir2 = "INSERT INTO rehber(isim,telefon) values('Mehmet Akif Birkan','222');";

$veri_gir1_sonuc = sqlite_query($baglan, $veri_gir1);
$veri_gir2_sonuc = sqlite_query($baglan, $veri_gir2);

Daha önce oluşturulan rehber tablosu içerisine veri girişi dinamik olarak yapılmaktadır.

$veriler = sqlite_query($baglan, "SELECT * FROM rehber LIMIT 5");
while($listele = sqlite_fetch_array($veriler)) {
   $id = $listele["id"];
   $isim = $listele["isim"];
   $telefon = $listele["telefon"];

   echo "$id , $isim, $telefon";
}


MYSQL ile PHP konusunda değinilen veri listeleme işlemi, herhangi bir döngü aracılığıyla çekilen verilerin çağırılması ve ekrana echo fonksiyonu ile yazdırılması şeklinde bir süreç ile tamamlanmaktadır. MYSQL veritabanında mysql_fetch_array() fonksiyonu ile yapılan sorgulama işleme SQLite veritabanı motorunda sqlite_fetch_array() fonksiyonu ile tanımlanmıştır.

Bir sonraki yazıda görüşmek üzere!