
İçerikler
PDO ile veri tabanı bağlantısının nasıl yapıldığını işledikten sonra, şimdi ise veri tabanında yer alan bilgileri nasıl listeleyeceğimizi anlatacağım. Bir öndeki derste; sorgulara bağlı olarak çalışan tekli verilerin nasıl çekildiğini işlemiştik. Şimdi ise gene aynı sorguları kullanıp bu sefer döngü yardımı ile nasıl çoklu veri elde edebileceğimizi göreceğiz.
Veri listeleme işlemini yaparken karşımıza 2 yol ayrımı çıkmaktadır. Bundan ilki veri çekerken sadeliktir. Diğeri ise güvenliktir. Yazacağımız sorgunun yapacağı işleme göre bu ayrım doğrultusunda kod yapısını ayarlamalıyız.
Sade ve Basit Olarak Veri Listeleme İşlemi
Kullanıcıdan herhangi bir bilgi istemeden veriler listeleyeceksek o zaman bu sade veri çekme desenini kullanmalıyız. Tekli veri çekmedeki sorgu gibi query(); metodu ile bu işlemi gerçekleştiriyoruz. Veri listeleme işini genel olarak foreach ile yapmaktayız. Bunun dışında while kullanarak da veri çekme işlemini gerçekleştirebiliyoruz.
Foreach Kullanarak Veri Listeleme İşlemi
Veriyi hangi şartlarda ya da şartsız olarak sorguyu hazırlıyoruz ve döngüde bu sorguyu seçerek işlemi gerçekleştiriyoruz. (Veri tabanı bağlantısının $vt olarak oluşturulduğu var sayılmıştır.)
$veri = $vt->query("select * from makale")->fetchAll(PDO::FETCH_ASSOC); foreach($veri as $row){ echo $row["baslik"]; }
Yukarıdaki kullanım ile veriler herhangi bir şart olmaksızın ekrana yazılacaktır. Bir önceki ders ile karşılaştırma yapacak olursak, dikkat çeken en önemli nokta fetch(); yerine kullandığımız fetchAll(); metodudur. Bu methodu bütün verilen taranmasını sağlamaktadır.
While Kullanarak Veri Listeleme İşlemi
Veriyi hangi şartlarda ya da şartsız olarak sorguyu hazırlıyoruz ve döngüde bu sorguyu seçerek işlemi gerçekleştiriyoruz. (Veri tabanı bağlantısının $vt olarak oluşturulduğu var sayılmıştır.)
$veri = $vt->query("select * from makale"); while($row = $veri->fetch(PDO::FETCH_ASSOC)){ echo $row["baslik"]; }
Bu şekilde yazdığımızda while döngüsünde kullanımını gerçekleştirebiliriz. Tabi bu yöntem yerine foreach kullanmak daha mantıklı olacaktır. Burada foreach döngüsünde kullandığımız fetchAll(); yerine fetch(); kullanmamız yeterli olacaktır.
Güvenlik Tedbirli, Değişkene Atamalı Veri Listeleme İşlemi
Veriye ulaşma aşamasında yapılan sorguda belirlediğimiz değer karşılıklarını başka bir parametrede belirterek güvenli ve düzenli bir sistem oluşturmuş oluyoruz. Bu sayede SQL Injection açıklarından kurtulmuş oluyoruz.
İlk sorguda kullanılan query(); methodu yerine burada prepare(); metodunu kullanıyoruz. Prepare ile hazırladığımız sorguda gelen değerlerin karşılığını “?” (Soru işareti) olarak belirtiyoruz. Burada yer alan verilerin karşılığını ise execute metodunda belirtiyoruz. Bu sayede verileri daha güveli bir biçimde işlemiş oluyoruz.
Yukarıda sözü geçen deyim uygulandığında örneğimiz aşağıdaki gibi olacaktır.
$veri = $vt->prepare("select * from makale where durum=?"); $veri->execute(array("0")); $islem = $veri->fetchAll(PDO::FETCH_ASSOC); foreach($islem as $row){ echo $row["baslik"]; }
Burada yer alan “?”(Soru işareti) ile belirtilen alanların değerleri execute ‘da sıralı bir biçimde yazılmalıdır. Eğer olur da burada yazılan değerleri karıştırırım diyorsanız o zaman şöyle bir alternatif uygulayarak gelen değerlerin karşılığını bir Array değişken adına çevirebiliriz. Bu sayede oluşacak karışıklığı da önlemiş olacağız.
$veri = $vt->prepare("select * from makale where durum=:durum"); $veri->execute(array("durum" => "0")); $islem = $veri->fetchAll(PDO::FETCH_ASSOC); foreach($islem as $row){ echo $row["baslik"]; }
Bu şekilde yazılarak gene güvenlik tedbirlerini almış oluyoruz. Bu bölümde yer alan 2 kodlama çeşidi de aynı görevi üstlenmektedir.
Burada yer alan 4 sorguda çıktı olarak aynı sonuçları verecektir. Fakat yazım farklılıklarından dolayı 3 ve 4. kodlar daha güvenli bir şekilde işlem görecektir. Buradaki güvenlik kullanıcıdan herhangi bir veri geldiğinde ona karşı alınan önlemdir. Eğer kullanıcıdan bir veri almaksızın listeleme yapacaksanız o zaman ilk 1 ve 2. Sorguyu kullanmanız daha mantıklı olacaktır. Eğer kullanıcıdan bir veri alıp listeleyecekseniz o zaman 3 ve 4. Sorgu tam size göredir. Bu güvenli sorgular sayesinde de SQL Injection açıklarından kurtulmuş oluyoruz.