Prepare() Metodu
prepare() SQL sorgularını ve deyimlerini çalıştırır. SQL sorgusuna dışarıdan gelen bilgileri güvenli bir biçimde kullanmanızı sağlar. bind_param() ve execute metotları ile birlikte çalışır. Veritabanı ve veritabanı’na bağlı bütün tablolar üzerinde SQL sorgularının güvenli biçimde kullanır.

Söz dizimi:

$pr=$db->prepare('SELECT * FROM deneme WHERE sira=?');


SQL sorgusunun başarılı olup olmamasına göre TRUE(1) veya FALSE(0) döndürür.TRUE dönüş değeri sorgunun geçerli olduğunu ve sunucu tarafında çalıştırıldığını gösterir.Eğer tablolara izin yoksa FALSE döndürecektir.

Ekleme,silme,değiştirme(INSERT,DELETE,UPDATE) gibi sorguların başarılı olduğu varsayılırsa, kaç tane satırın etkilendiğini $db->affected_rows özelliği ile edebiliriz. Özellikle SELECT sorgusundan dönen toplam sonuç sayısını $pr->num_rows özelliği elde edebiliriz.

bind_param() Metodu


bind_param() metodu ile hazırlanan SQL sorgusunda ? işareti ile belirtilen veri girişleri için veri tiplerini parametre olarak hazırlar.

Söz Dizimi:

$pr->bind_param(parametre,değişken1,değişken2);

Parametre Açıklama
i Değişken tipi integer
d Değişken tipi noktalı tipi
s Değişken tipi string
b Değişken tipi boolean(ikili veri tipi),paketler halinde gönderilir
Parametreler SQL sorgusunda ? işareti ile gösterilen yere ne tür bir verinin girileceğini tanımlar.Parametrelerden de görüleceği gibi, sayılar için ayrı,stringler için ayrı veriler tanımlayabiliriz.Böylece dışarıdan gelebilecek saldırıların önüne geçebilir ve daha güvenli sorgular hazırlayabiliriz.

execute() Metodu prepare() ile hazırlanan ve bind_param() ile veri tipi belirlenip SQL sorgusuna aktarılan,sorguyu çalıştırır.Şimdi de biraz örnek yaparak teoriyi geride bırakalım:)



prepare-ve-bind_param

Yukarıda okul veritabanının öğrenci tablosu ile çalışacağız;



/*Veritabanı bağlantısı oluşturalım*/
/*mysqli('sunucu','veritabanı kullanıcı adı','veritabanı şifre','veritabanı adı')*/
$db=new mysqli('localhost','root','','okul');

/*Bağlantıyı kontrol edelim..*/
if($db->connect_errno) die($db->connect_errno);

/*Tablo veri karakter yapısı*/
$db->set_charset('UTF8');

/*prepare SQL sorgumuzu yazalım */
if($pr=$db->prepare('SELECT * FROM ogrenci')){
/*Sorgumuzu execute ile çalıştıralım*/
$pr->execute();

/*SQL sorgusundan dönen sonuçları alalım...*/
$result=$pr->get_result();

/*fetch_assoc ile dönen sonuçları isme göre yazdıralım*/
/*fetch_assoc bize dizi döndürür detaylı görmek isterseniz var_dump(fetch_assoc()) ile görebilirsiniz...*/
while($row=$result->fetch_assoc()){
printf('%s ---> %s
',$row['adsoyad'],$row['sinif']);
}

/*Sorguyu sonlandır*/
$pr->close();

}else{
echo 'Sorguda hata var:'.$db->error;
}

/*Bağlantıyı sonlandır*/
$db->close();

Öğrenci tablosunun adsoyad ve sinif sütunlarındaki kayıtlar yandaki şekildeki gibidir.







Aşağıdaki örneğimizde de “SELECT * FROM ogrenci WHERE id=?” SQL sorgusundaki ? ile ilgili dışarıdan veri girişi nasıl yapılacağı belirtilmiştir.




/** Veritabanı Bağlantısını oluşturalım*/
$db=new mysqli('localhost','root','','okul');

/*Bağlantı kontrolunu yapalım*/
if($db->connect_errno) die($db->connect_error);

/** Tablo karakter yapısı*/
$db->set_charset('utf8');

if($pr=$db->prepare('SELECT * FROM ogrenci WHERE id=?')){
/** Dışarıdan $_GET['id'] geldiğini düşünelim*/
$_GET['id']=5;

/** SQL sorgusundaki ? işareti yerine sayı türünde değer gelir */
$pr->bind_param('i',$_GET['id']);

/** Sorguyu çalıştıralım*/
$pr->execute();

/** SQL sorgusundaki sonuçları alalım*/
$result=$pr->get_result();

/** Bulunan kayıt sayısını elde edelim*/
echo ''.$result->num_rows.' Kayıt bulundu
';


/** Dönen sonuçları ekrana yazdıralım */

while($row=$result->fetch_assoc()){
printf('%s %s.sınıf
',$row['adsoyad'],$row['sinif']);
}
/** Sorguyu sonlandıralım */
$pr->close();
}else{
echo 'Sorguda hata var'.$db->error;
}
/*Bağlantıyı sonlandıralım*/

$db->close();


Yukarıdaki kodun ekran görüntüsü yandaki gibidir.Id değeri 5 olan 1 kişi buldu ve $row[‘adsoyad’] ve $row[‘sinif’] değerlerini ekrana bastık.



NOT: Mutlaka yazdığınız kodlara yorum satırı koymayı unutmayın çünkü ileride baktığınızda yazdığınız kodda ne yaptığınızı almamanız çok doğal bir şey bundan dolayı yorum satırı kodlamada önemli bir noktadır.

Yazımızın sonuna gelmiş bulunmaktayız umarım yararlı olabilmişimdir.Takıldığınız bir yer olursa yorum atarsanız yardımcı olurum :)

Site Kaynağı: http://mtalhasahin.com/blog