@Obsidya @asimus
Yukarıda verilen bilgiler hatalıdır. Prepare edilmiş sorguya gelen parametreler tekrar sorgulanmaz. Bu yüzden sql injection mümkün değildir. Çünkü prepare ile zaten sorgu hazırlanmıştır ve parametre ile sadece ayıklama ve tespit işlemi yapılır. Bu yüzden prepare edilmiş bir sorgu üzerinde çoklu execute yapılabilme imkanı vardır.
PDO'da bindParam, bindValue SQL Injection engelleme görevi görmezler. bindParam ile bindValue arasındaki en önemli fark PARAM_INPUT_OUTPUT sabitidir. bindParam değişkene bağlı parametre gönderirken, bindValue girilen değerlere göre parametre gönderir. İkisinde de veri tipi belirleme imkanı varken, bindParam çıktı için verinin uzunluğunuda belirlemeyi mümkün kılar.
mySQL:
PREPARE stmt FROM "SELECT ?";
SET @param = "'blablablabla', SQRT(4) as Iki";
EXECUTE stmt USING @param;
/*
b4d:
SELECT 'blablablabla', SQRT(4) as IkiMi
*/
PDO:
<?php
$PDO = new PDO("mysql:host=localhost; dbname=test; charset=utf8", "root", "");
$stmt = $PDO->prepare("SELECT ?");
$q = "'blablablabla', SQRT(4) as Iki";
$stmt->bindParam(1, $q);
$stmt->execute();
$Birinci = $stmt->fetch(PDO::FETCH_ASSOC);
$stmt->bindValue(1, $q);
$stmt->execute();
$Ikinci = $stmt->fetch(PDO::FETCH_ASSOC);
$stmt->execute(array($q));
$Ucuncu = $stmt->fetch(PDO::FETCH_ASSOC);
print_r($Birinci);
print_r($Ikinci);
print_r($Ucuncu);
print_r($PDO->query("SELECT " . $q)->fetch(PDO::FETCH_ASSOC));
Eğer sql injection konusunda engelleme yapmıyorlarsa yaklaşık 5000 satır kodu tekrar güncellemem gerekiyor

Peki SQL injection dan nasıl kurtulabilirim?
--R10.NET; Flood Engellendi -->-> Yeni yazılan mesaj 08:15:09 -->-> Daha önceki mesaj 08:13:22 --
Merhabalar hocam,
quote tam olarak ne işe yarıyor acaba?
Teşekkürler.
Mesajınızı görmemişim kusura bakmayın. quote tırnak işaretleri arasına alıyor sadece.