Veritabanı Nesnesi
Veritabanı nesnesi: veritabanı bağlantısını kuran, veritabanı işlemlerini gerçekleştiren nesnedir. PDO soyutlama katmanından genişletilmiştir.
Veritabanı nesnesi Mysql ve PostreSql veritabanı yönetim sistemlerini desteklemektedir. Diğer veritabanı yönetim sistemlerine destek sunmak ise oldukça basittir.
Nesne Sabitleri
Name | Info | Type | Visibility |
---|---|---|---|
$prefix | Tablolar için ön ek bilgisini tutar. | String | Private |
$cols | Sorgular için oluşturulan columns değerlerini tutar. | String | Private |
$values | Sorgulara gönderilecek olan değerleri tutar. | Array | Private |
$cache | Sorgular için önbellek değerini tutar. | Boolean | Private |
$cacheTime | Sorgu önbellek süresini tutar. | Integer | Private |
$log | Sorgunun raporlara eklenip eklenmeyeceği bilgisini tutar. | Boolean | Private |
Nesne Özellikleri (Metotlar)
Veritabanı nesnesi toplam 12 adet metoda sahiptir. Bu sayıya yapıcı ve yıkıcı metotlar dahildir. Veritabanı nesneni PDO nesnesinden türetildiği için PDOya ait query, fetch gibi metotlarda bu nesne üzerinden rahatlıkla kullanılabilir.
- __construct
- add
- update
- delete
- select
- selectSingle
- innerJoin
- getCount
- search
- convertCols
- convertValues
- cache
- setLog
- __destruct
1. __construct
Veritabanıyla bağlantı kurabilmek için kullanılan metottur. Bu metot geriye herhangi bir değer döndürmez. Metodun aldığı parametreler sırasıyla aşağıda listelenmiştir.
Name | Info | Type | Constrait |
---|---|---|---|
$type | Bağlantı kurulacak veritabanı yönetim sistemini belirtir. | String | Evet |
$server | Bağlantı kurulacak veritabanı sunucusunu belirtir. | String | Evet |
$dbname | Bağlantı kurulacak veritabanı adını belirtir. | String | Evet |
$user | Veritabanı kullanıcı adını belirtir. | String | Evet |
$pass | Veritabanı kullanıcı parolasını belirtir. | String | Evet |
$prefix | Tablo önekini belirtir. | String | Evet |
Veritabanı bağlantısı yapabilmek için örnek kod aşağıdaki gibi olmalıdır.
new Ataworks\Core\Db("mysql", "localhost", "test_db", "root", "123456", "ata_");
2. add
Veritabanına yeni bir kayıt eklemek için kullanılan metottur. Kayıt ekleme işleminin başarılı olması durumunda eklenen satırın ID değerini(Integer) , başarısız olması durumunda ise PDO sınıfının errorInfo() metodunu döndürür. Metodun aldığı parametreler sırasıyla aşağıda listelenmiştir.
Name | Info | Type | Constrait |
---|---|---|---|
$table | Ekleme yapılacak tablo adını belirtir. | String | Evet |
$cols | Tablonun hangi alanlarına ekleme yapılacağını belirtir. | String | Evet |
$values | Tablonun ilgili alanlarına hangi değerlerin gönderileceğini belirtir. | Array | Evet |
Örnek Kodlar:
$data = ["admin", "123456", "pending"];
$add = $db->add(
"users",
"username, pass, status",
$data
);
Yukarıda ki kod users tablosuna username, pass ve status alanlarına $data dizisinde yer alan değerleri ekleyerek yeni bir satır oluşturur.
3. update
Varolan bir kaydı güncellemek için kullanılan metottur. Güncelleme işleminin başarılı olması sonucunda False, başarısız olması durumunda ise PDO sınıfının errorInfo() metodunu döndürür. Metodun aldığı parametreler sırasıyla aşağıda listelenmiştir.
Name | Info | Type | Constrait |
---|---|---|---|
$table | Düzenleme yapılacak tablo adını belirtir. | String | Evet |
$cols | Tablonun hangi alanlarının güncelleneceğini belirtir. | String | Evet |
$values | Güncellenecek alanlarının değerlerini belirtir. | Mixed | Evet |
$where | Hangi satır(lar)ın güncelleneceğini bildiren koşulları içerir. | String | Evet |
Users tablosunda ID değeri 1 olan kullanıcının şifresini Qwerty olarak güncellemek için örnek kod:
$db->update(
"users",
"pass",
"Qwerty",
"id = 1"
);
Yeni değerler String olarak girilebildiği gibi Array yada Integer olarak da girilebilmektedir. Array olarak kullanım için örnek kod:
$data = ["john", "doe", "123456"];
$db->update(
"users",
"name, surname, pass",
$data,
"id = 1"
);
4. delete
Veritabanından kayıt silmek için kullanılan metottur. Silme işleminin başarılı olması durumunda True, hata oluşması durumunda ise PDO sınıfının errorInfo() metodunu geri döndürür. Metodun aldığı parametreler sırasıyla aşağıda listelenmiştir.
Name | Info | Type | Constrait |
---|---|---|---|
$table | Silinecek olan verinin bulunduğu tablo adını belirtir. | String | Evet |
$where | Hangi satır(lar)ın silineceğini bildiren koşulları içerir. | Mixed | Evet |
$values | Where parametresinde yer alan koşulların değerlerini belirtir. | Mixed | Evet |
Users tablosundan ID değeri 1 olan kullanıcıyı silmek için örnek kod:
$db->delete("users", "id = ?", 1);
Users tablosundan name değeri "john", surname değeri "doe" olan kullanıcıları silmek için örnek kod:
$db->delete("users", "name = ? && surname = ?", ["john", "doe"]);
5. select
Veritabanından toplu kayıt çekmek için kullanılan metottur. Eşleşen kayıt bulunması durumunda Array, bulunmaması durumunda ise False döndürür. Metodun aldığı parametreler sırasıyla aşağıda listelenmiştir.
Name | Info | Type | Constrait |
---|---|---|---|
$table | Sorgu yapılacak tablo adını belirtir. | String | Evet |
$cols | Tablodaki hangi sütunların alınacağını belirtir. * standart mysqlde olduğu gibi tüm sütunları belirtir. | String | Evet |
$where | Sorgu koşulunu belirtir. | Mixed | Evet |
$values | Sorgu koşulunun değerlerini belirtir. | Mixed | Evet |
$limit | Sorgu limitini belirtir. | Integer | Hayır |
$order_by | Sorguların sıralanma yöntemini belirtir | String | Hayır |
Users tablosundaki tüm satırları getirmek için örnek kod:
$db->select("users", "*", 1, 1);
Users tablosundaki tüm satırları IDye göre önce en eski kayıtlardan 20 tane getirmek için örnek kod:
$db->select(
"users",
"*",
1,
1,
20,
"id ASC"
);
Users tablosundan name değeri john olan kullanıcıların hepsini getirmek için örnek kod:
$db->select(
"users",
"*",
"name = ?",
"john"
);
$values parametresi String olabildiği gibi Array de olabilir. Örneğin users tablosundan name değeri john, surname değeri doe olan tüm satırları getirmek için örnek kod:
$db->select(
"users",
"*",
"name = ? && surname = ?",
["john", "doe"]
);
6. selectSingle
Veritabanından tekli kayıt(tek bir satır) çekmek için kullanılan metottur. Eşleşen kayıt bulunması sonucunda Array, bulunamaması durumunda False döndürür. Metodun aldığı parametreler sırasıyla aşağıda listelenmiştir.
Name | Info | Type | Constrait |
---|---|---|---|
$table | Sorgu yapılacak tablo adını belirtir. | String | Evet |
$cols | Tablodaki hangi sütunların alınacağını belirtir. * standart mysqlde olduğu gibi tüm sütunları belirtir. | String | Evet |
$where | Sorgu koşulunu belirtir. | Mixed | Evet |
$values | Sorgu koşulunun değerlerini belirtir. | Mixed | Evet |
$order_by | Sorgunun sıralanma yöntemini belirtir | String | Hayır |
Users tablosundan ID değeri 1 olan kullanıcıyı getirmek için örnek kod:
$db->selectSingle("users", "*", "id = ?", 1);
Users tablosundan status değeri 1 olan ve email adresi [email protected] olan kullanıcıyı getirmek için örnek kod:
$db->selectSingle("users", "*", "status = ? && email = ?", [1, "[email protected]"]);
7. innerJoin
Tabloları birleştirerek kayıt çekme için kullanılan metottur. Sorgu ile eşleşen kayıt bulunması durumunda Array, bulunmaması durumunda ise False döndürür. Metodun aldığı parametreler sırasıyla aşağıda listelenmiştir.
Name | Info | Type | Constrait |
---|---|---|---|
$cols | Tablodaki hangi sütunların alınacağını belirtir. * standart mysqlde olduğu gibi tüm sütunları belirtir. | String | Evet |
$table | Sorgulanacak tablo adını belirtir. | String | Evet |
$joinTables | Sorgulanacak tablo ile birleştirilecek olan tablo adını belirtir. | String | Evet |
$where | Sorgu koşulunu belirtir. | Mixed | Evet |
$values | Sorgu koşulunun değerlerini belirtir. | Mixed | Evet |
$single | Sorgudan tek bir satır mı yoksa tüm satırların mı çekileceğini belirtir. True tek bir satırı, false tüm satırları getirir. | Boolean | Hayır |
$limit | Sorgu limitini belirtir. | Integer | Hayır |
$order_by | Sorguların sıralanma yöntemini belirtir | String | Hayır |
Örneğin veritabanında bulunan pages tablosu ile pages_data tablosunu birleştirmek için örnek kod:
$db->innerJoin(
"*",
"pages",
"pages_data",
"pages_data.PageId = ?",
"pages.id",
false
);
Yukarıdaki satırda pages tablosunun id alanı ile pages_data tablosunun PageId alanı ile eşleşen son kayıtı getirmektedir. Bu sorgunun standart mysql çıktısı aşağıdaki gibidir.
SELECT * FROM pages INNER JOIN pages_data ON pages_data.PageId = pages.id
Eşleşen tüm kayıtları çekmek için örnek kod:
$db->innerJoin(
"*",
"pages",
"pages_data",
"pages_data.PageId = ?",
"pages.id",
true
);
Eşleşen tüm kayıtlardan son 20 tanesini çekmek için örnek kod:
$db->innerJoin(
"*",
"pages",
"pages_data",
"pages_data.PageId = ?",
"pages.id",
true,
20
);
Bu metodu kullanırken $order_by parametresini kullanabilmek için, bu parametreden önce gelen $single ve $limit parametrelerinin gönderilmesi gerekmektedir. $single parametresinin varsayılan değeri false, $limit parametresinin varsayılan değeri ise 120'dir.
Birden fazla şart ile sorgulama göndermek için örnek kod:
$db->innerJoin(
"*",
"pages",
"pages_data",
"pages_data.PageId = ? && lang_id = ?",
["pages.id", 0],
false
);
Burada dikkat etmeniz gereken lang_id sütunu eğer iki tablo içinde de bulunuyorsa sorgu hata verecektir. Bunun için iki tabloda da bulunan sütuna göre sorgulamak için sütun önüne tablo adı eklenmelidir. Örneğin pages_data.lang_id.
8. getCount
Tablodaki satır sayısını bulmak için kullanılan metottur. Koşul belirtilebildiği gibi koşulsuz olarak da kullanılabilir. Integer değer döndürür. Metodun aldığı parametreler sırasıyla aşağıda listelenmiştir.
Name | Info | Type | Constrait |
---|---|---|---|
$table | Sorgunun yapılacağı tabloyu belirtir. | String | Evet |
$cols | Tablodaki hangi sütunların alınacağını belirtir. | String | Hayır |
$where | Sorgu için koşulunu belirtir. | Mixed | Hayır |
Users tablosunda kaç adet kayıt olduğunu bulmak için örnek kod:
$db->getCount("users");
getCount metodunda bir koşul belirtmek diğer metotlardan farklıdır. Örneğin status değeri 1 olan kullanıcıların sayısını öğrenmek için örnek kod:
$db->getCount("users", "*", "status = 1");
Burada dikkat edilmesi gereken koşul ve koşulun değerinin tek parametrede gönderilmesidir.
9. search
Tablolarda arama yapmak için kullanılan metottur. Aramayla ilgili sonuç bulunması durumunda Array, bulunmaması durumunda ise False döndürür. Metodun aldığı parametreler sırasıyla aşağıda listelenmiştir.
Name | Info | Type | Constrait |
---|---|---|---|
$table | Arama yapılacak tablo adını belirtir. | String | Evet |
$cols | Tablodaki hangi sütunların alınacağını belirtir. * standart mysqlde olduğu gibi tüm sütunları belirtir. | String | Evet |
$where | Arama koşulunu belirtir. | Mixed | Evet |
$values | Arama koşulunun değerlerini belirtir. | Mixed | Evet |
$limit | Sonuç limitini belirtir. | Integer | Hayır |
$order_by | Sorguların sıralanma yöntemini belirtir | String | Hayır |
Users tablosund biography değerinde "test" geçen kullanıcıları bulmak için örnek kod:
$db->search(
"users",
"*",
"biography",
"test"
);
10. convertCols
Add ve update metotlarında kullanılan $cols parametresini veritabanının anlayacağı formata dönüştüren metottur. Private olarak tanımlanmıştır. Dışarıdan erişime kapalıdır. Geri String veri döndürür.
11. convertValues
Hemen hemen tüm metotlarda kullanılan $values parametresini veritabanının anlayacağı formata dönüştüren metottur. Private olarak tanımlanmıştır. Dışarıdan erişime kapalıdır. Geri Array veri döndürür.
12. cache
Sorguların önbelleğe alınıp alınmayacağını ayarlayan metottur. Geri Object(veritabanı nesnesi) değerini döndürür. Metodun aldığı parametreler sırasıyla aşağıda listelenmiştir.
Name | Info | Type | Constrait |
---|---|---|---|
$type | Önbelleğin yeni durumunu belirtir.True olması durumunda önbellek açılır, False olması durumunda kapanır. | Boolean | Evet |
$time | Önbellek süresini belirtir. | Integer | Hayır |
Veritabanı nesnesinde önbellek kapalı olarak gelmektedir. Sorguların önbelleğe alınabilmesi için önbelleğin aktif edildiği satırdan sonra yapılan sorgular önbelleklenir. Örnek:
$db->select("users", "*", 1, 1); // Önbelleğe alınmaz.
$db->cache(true);
$db->select("users", "*", 1, 1); // Önbelleğe alınır.
Bir başka örnek kod:
$db->cache(true, 60)->select("users", "*", 1, 1);
Yukarıda ki kod parçası ise önbellek değerini aktif eder ve önbellek süresini 60 saniye olarak ayarlar. Daha sonra users tablosundan verileri çeker.
13. setLog
Sorguların log kayıtlarına eklenip eklenmeyeceğini belirlemeye yarayan metottur. Boolean veri tipinde tek bir parametre alır. True gönderilirse sorgular log kayıtlarına eklenir. False gönderilirse eklenmez.
$db->setLog(false); // Loglar kapanır
$db->setLog(true); // Loglar açılır.
Örneğin belirli sorguları raporlamak istemiyorsunuz:
$db->setLog(false);
$db->select("users", "*", 1, 1);
$db->setLog(true);
Bu şekilde örneğimizi tamamlayabiliriz.
14. __destruct
Nesnenin yıkıcı metodudur. Sorgularda güncellenen nesne sabitlerini ($cols,$values ve $limit) temizleyerek bir sonra ki sorgunun düzgün çalışmasını sağlar. Bu metoda "Reset" metoduda diyebiliriz.