-Veritabanı işlemlerinde her tablo için ayrı ayrı sorgu yazmaktan kurtulma
-Classlar yardımı ile db ye insert etme
-Temel bir db classı oluşturma
-Singleton design pattern


-Veritabanı işlemlerinde her tablo için ayrı ayrı sorgu yazmaktan kurtulma
-Classlar yardımı ile db ye insert etme

Hızlıca bir başlayalım.

Yeni başlayan birisi , herhangi bi framework kullanmayan veyahut kendi yapısı olmayan birisi veritabanına ekleme yaparken nasıl yapıyor ?

->Blog isimli veritabanımız olsun.
->Tablolarıda = üyeler,yazilar,yorumlar // şeklinde olsun.

üyeler tablosuna insert yapmak istenildiğinde şöyle bir sorgu yazılacak --> "Insert into uyeler (uyeIsmi , uyeHash,uyeMail) Values("deneme isim","deneme hash","deneme mail")"

yazilar tablosuna insert yapmak istenildiğinde --> "Insert into yazilar (baslik,icerik,yazar) Values("deneme baslik","deneme icerik","deneme yazar")"

aynı şekilde yorumlar tablosu içinde ayrı bir sorgu yazılacak.

3 adet tablo için bu sorugları yazmak sorun değil. Peki 100 adet tablo olsaydı ? Yazması uzun sürecek. Hadi yazdık diyelim, sonradan tablo alanları isimleri değiştiğinde bakımı daha da zor olacak. Ve her yeni projede 0 dan CRUD işlemlerini yapmak zorunda olacağız.

Bu problemi nasıl halledebiliriz ?

Öncelikle elinizde databasedeki her tablo için bir class olduğunu düşünün. (Tabi bu classlarıda otomatik generate ettiricez, tek tek elle yazmayacağız).
Ve tek bir insert fonksiyonunun olduğunu. Bu insert fonksiyonu parametre olarak bir nesne alsın, ve aldığı nesneye göre bir insert sorgusu oluştursun.

Hemen yapalım, öncelikle tablolarımızı temsil eden classımız olsun. (dediğim gibi bu classlarıda basit bir kaç sorgu ve basit bir iki dosya yazma işlemi ile php ye otomatik oluşturtacağız)



Kod:
class yazilar{
public $baslik;
public $icerik;
public $yazar;
}

class uyeler{
public $uyeIsmi;
public $uyeHash;
public $uyeMail;
}

Kod:
function insert($obj){//nesneyi parametre olarak alıyor

$vars = get_object_vars($obj); //gelen nesnedeki değişkenleri bir key value dizisine çeviriyor
$vars_keys = array_keys($vars); //dizideki keyleri tutuyor
$vars_values = array_values($vars); //dizideki value leri tutuyor

$sql = "INSERT INTO ".get_class($obj); // INSERT INTO class_ismi şeklinde sorgu oluşturuyor
$sql .= " (";
$sql .= join(',',$vars_keys); // key dizisini araya , koyarak ayırıyor
$sql .= ") VALUES(";
$filled = array_fill_keys($vars_keys, '?'); //değerler dizisininin elemanlarını ? ile replace ediyor (pdo da prepared statement oluşturmak için gerekli , ilerde anlatacağım)

$sql .= join(',',$filled); // ? lerini , ile ayırarak sorguya ekliyor
$sql .= ")";

return $sql;
}
Şimdi hazırladığımız insert fonksiyonunu kullanarak otomatik bir sorgu oluşturalım :
Kod:
yeniYazi = new yazilar();
yeniYazi->baslik = "deneme baslik";
yeniYazi->icerik = "deneme icerik";
yeniYazi->yazar = "deneme yazar";

yeniUye = new uyeler();
yeniUye->uyeIsim = "deneme isim";
yeniUye->uyeHash = "deneme hash";
yeniUye->uyeMail = "deneme mail";

echo insert(yeniYazi);
echo "<br>";
echo insert(yeniUye);
Bu kodları çalıştırdığınızda şöyle bir çıktı alacaksınız arkadaşlar :


Kod:
INSERT INTO yazilar (baslik,icerik,yazar) VALUES(?,?,?)
INSERT INTO uyeler (uyeIsim,uyeHash,uyeMail) VALUES(?,?,?)

Classları oluştururken değerleri kendimi verdik tabi bu değerleri normalde dışarıdan alacağız , misal :


Kod:
yeniYazi->baslik = $_POST['baslik'];


aLinti...