PDO ile Select işlemi
 

PDO Select ve Prepare Kullanımı

Eğer SQL sogularımızda dışarıdan verigirişi mevcut ise mutlaka prepare metodu kullanılmalıdır. Bu metot SQL incjectionlardan kutrulmak için büyük bir güvenlik sağlar.

Pdo da prepare() metodu  çalıştırılmak için bir SQL deyimini hazırlar. Prepare metodu bindparam(), execute(), bindColumn(), bindValue() metotları ile beraber çalışır. SQL sorguları oluşturulurken dışarıdan gelen verileri  soru işareti veya önünde iki nokta üst üste yazarak oluşturacagımız bir isim (örnek :adi , :eposta vb.) ile sorgumuzda uygun yerlere dahil edebiliriz.

Soru İşareti İle Dışarıdan Veri Alma

Örnek : Aşağıdaki örnekte $_GET ile alınan $dyili değişkenindeki  değere göre doğum yılı $dyili değişkeninden daha büyük olan üye adları ve eposta adresleri listeleniyor.

<?php
$dyili=$_GET["dyili"];
$q = $pdo->prepare("SELECT * FROM uyeler where dyili>?");
$q->execute(array($dyili));
if ($d=$q->fetchAll()){
	foreach($d as $k=>$v) {
		echo $v["uyeadi"].'<br>';
		echo $v["eposta"].'<br>';
	}
}
?>

Burada sorgu hazırlanırken prepare metodu kullanılmıştır. Prepare metodunda dışarıdan gelmesi gereken veri için dyili>? şeklinde soru işareti değeri ile dışarıdan gelen verinin sorgumuzda dahil edileceği alan belirlenmiştir. $q->execute(array($dyili)) sorgumuzu burada girilen dizi içerisindeki veriyi dahil etmiş ve $q->fetchAll() ile sorguya uygun kayıtların listesi alınmıştır. 

Eğer dışarıdan birden fazla veri girişi yapılacak ise örnek kullanımı şu şekildedir.

Örnek : Adı ve soyadı alanı ile eşleşen verileri select sorgusu ile alıyoruz.

<?php
$adi=$_GET["adi"];
$soyadi=$_GET["soyadi"];
$q = $pdo->prepare("SELECT * FROM uyeler where adi=? and soyadi=?");
$q->execute(array($adi,$soyadi));
if ($d=$q->fetchAll()){
	foreach($d as $k=>$v) {
		echo $v["uyeadi"].'<br>';
		echo $v["eposta"].'<br>';
	}
}
?>

Örnekte sql sorgumuzda where koşulundan sonra sırasıyla adi=? ,  soyadi=? şeklinde ad ve soyad alanlari için dışarıdan veri alacağımız alanlar belirlenmiştir. Burada dikkat edilmesi gereken nokta execute ile dışarıdan verileri sorgumuza dahil ederken sorgumuzda soru işaretlerini (?) kullandığımız sıraya dikkat etmemiz gerekmektedir. Buna göre ilk önce adı daha sonra soyadı verisi gelmesi gerektiğinden execute işlemi $q->execute(array($adi,$soyadi)); şeklinde olmalıdır. array içerisindeki $adi verisi ilk soru işaretine $soyadi verisi ikinsi soru işaretine karşılık gelmektedir.

 :isim İle Dışarıdan Veri Alma

Bu yöntemin soru işaretinden farkı sorgumuzda isimleri tanimlamiş olacağımızdan execute içerisinde  sırası önem taşımamaktadır. Sadece tanımladığımız isime uygun bir anahtar ile diziyi oluşturmamız yeterlidir. Diger bir avantajıda sql sorgumuzun okunabilirliğini arttırmasıdır.

Örnek :

<?php
$dyili=$_GET["dyili"];
$q = $pdo->prepare("SELECT * FROM uyeler where dyili>:dy");
$q->execute(array("dy"=>$dyili));
if ($d=$q->fetchAll()){
	foreach($d as $k=>$v) {
		echo $v["uyeadi"].'<br>';
		echo $v["eposta"].'<br>';
	}
}
?>

Örnekte soru işareti yerine :dy şeklinde bir isim kullandık. Bundan dolayı execute içerisinde tanımlamış olduğumuz isim ile bir anahtar deger yapısı oluşturmamız gerekti. $q->execute(array("dy"=>$dyili)); Burada "dy" tanımlamış oldugumuz isim ve =>$dyili da bu isimin alması gereken değerdir.

Örnek :

<?php
$adi=$_GET["adi"];
$soyadi=$_GET["soyadi"];
$q = $pdo->prepare("SELECT * FROM uyeler where adi=:adi and soyadi=:soyadi");
$q->execute(array("adi"=>$adi,"soyadi"=>$soyadi));
if ($d=$q->fetchAll()){
	foreach($d as $k=>$v) {
		echo $v["uyeadi"].'<br>';
		echo $v["eposta"].'<br>';
	}
}
?>
Ekleyen:admin

Adınız
:
Eposta
:



Resmi Degistir