Diğer veritabanları uzantılarında olduğu gibi PDO ile de seçilen veriyi nesneye çevirmek mümkündür. Ama PDO diğer eklentilerden daha fazla özellik ve esneklik sunmaktadır. Bu yazıda bu özelliklerden bir kaç tanesine değineceğim.
Tek Nesne Getirme
Sonuçlardan nesne oluşturmak için iki seçeneğimiz var. Tanıdık yöntem olan fetch()
1 2 3 4 5 6 |
class Ogrenci {}; $sorgu = $baglan->query('SELECT numara,ad,soyad,sinif FROM Ogrenciler LIMIT 1'); $sorgu->setFetchMode(PDO::FETCH_CLASS, 'Ogrenci'); $ogrenci = $sorgu->fetch(); |
yada fetchObject() metodu kullanılabilir.
1 2 3 4 |
class Ogrenci {}; $ogrenci = $baglan->query('SELECT numara,ad,soyad,sinif FROM Ogrenciler LIMIT 1')->fetchObject('Ogrenci'); |
Ogrenci nesnesi iki kodda da aynı olarak oluşturulacaktır.
1 2 3 4 5 6 7 8 |
object(Ogrenci)#3 (4) { ["numara"]=> string(3) "113" ["ad"]=> string(5) "hayri" ["soyad"]=> string(3) "koc" ["sinif"]=> string(3) "11c" } |
Kesinlikle ikinci yöntem çok daha iyi görünüyor. Aralarındaki farklı gelecek olursak, 1. yöntemde nesne oluşturulmazsa fetch() metodu bize bir dizi döndürecektir. fetchObject() metodu ile ise bize bir sınıf döndürmektedir.
Nesne Dizisi Getirme
Yukarıdaki her iki yöntemle tüm verileri getirmek mümkündür. fetch() metodu ile tek kayıt getirilebildiği gibi fetchAll() metodu ile sorgudan etkilenen tüm kayıtları alabiliriz.
1 2 3 4 |
class Ogrenci {}; $ogrenciler = $baglan->query('SELECT numara,ad,soyad,sinif FROM Ogrenciler')->fetchAll(PDO::FETCH_CLASS, 'Ogrenci'); |
$ogrenciler dizisi:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
array(3) { [0]=> object(Ogrenci)#3 (4) { ["numara"]=> string(3) "113" ["ad"]=> string(5) "hayri" ["soyad"]=> string(3) "koc" ["sinif"]=> string(3) "11c" } [1]=> object(Ogrenci)#4 (4) { ["numara"]=> string(2) "54" ["ad"]=> string(5) "ahmet" ["soyad"]=> string(3) "can" ["sinif"]=> string(3) "11d" } [2]=> object(Ogrenci)#5 (4) { ["numara"]=> string(2) "43" ["ad"]=> string(7) "huseyin" ["soyad"]=> string(2) "oz" ["sinif"]=> string(3) "11c" } } |
İsterseniz ilk sütuna göre gruplayarak listeyi çekmek de mümkün. Bu yapmak için PDO::FETCH_CLASS bildiriminin yanına PDO::FETCH_GROUP bildirimini eklemek yeterli olacaktır.
1 2 3 4 |
class Ogrenci {}; $ogrenciler = $baglan->query('SELECT sinif,ad,soyad,sinif FROM Ogrenciler')->fetchAll(PDO::FETCH_CLASS|PDO::FETCH_GROUP,'Ogrenci'); |
$ogrenciler dizisi:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
array(2) { ["11c"]=> array(2) { [0]=> object(Ogrenci)#3 (3) { ["ad"]=> string(5) "hayri" ["soyad"]=> string(3) "koc" ["sinif"]=> string(3) "11c" } [1]=> object(Ogrenci)#5 (3) { ["ad"]=> string(7) "huseyin" ["soyad"]=> string(2) "oz" ["sinif"]=> string(3) "11c" } } ["11d"]=>; array(1) { [0]=> object(Ogrenci)#4 (3) { ["ad"]=> string(5) "ahmet" ["soyad"]=> string(3) "can" ["sinif"]=> string(3) "11d" } } } |