array ( 0 => 'index.php', 1 => 'PHP Manual', ), 'head' => array ( 0 => 'UTF-8', 1 => 'tr', ), 'this' => array ( 0 => 'pdo.prepared-statements.php', 1 => 'Hazır deyimler ve Saklı Yordamlar', ), 'up' => array ( 0 => 'book.pdo.php', 1 => 'PDO', ), 'prev' => array ( 0 => 'pdo.transactions.php', 1 => 'Hareketler ve Ototeslim', ), 'next' => array ( 0 => 'pdo.error-handling.php', 1 => 'Hatalar ve Ele Alınışları', ), 'alternatives' => array ( ), 'source' => array ( 'lang' => 'tr', 'path' => 'reference/pdo/prepared-statements.xml', ), ); $setup["toc"] = $TOC; $setup["toc_deprecated"] = $TOC_DEPRECATED; $setup["parents"] = $PARENTS; manual_setup($setup); ?>
Genellikle gelişkin veritabanlarınca desteklenen, hazır deyimler diye bilinen bir kavram vardır. Bunlar nedir? Bunları bir takım bağımsız değişkenlerle özelleştirilebilen, SQL için derlenmiş şablonlar olarak düşünebilirsiniz. Hazır deyimlerin başlıca iki yararı vardır:
Hazır deyimleri kullanmanın bir başka yararı da bunları desteklemeyen sürücüler için PDO'nun bu özelliği taklit etmesidir (PDO'nun taklit ettiği tek özellik budur). Böylece aynı veri erişim uygulamasını veritabanınızın yeteneklerinden bağımsız olarak kullanabilirsiniz.
Örnek 1 - Hazır deyimlerle bağımsız değişken ismine göre veri girişi
Bu örnekte isim
ve deger
alanlarına
bağımsız değişkenlerin isimlerine göre bir INSERT sorgusu ile defalarca veri
girilmektedir.
<?php
$deyim = $dbh->prepare(
"INSERT INTO KUTUK (isim, deger) VALUES (:isim, :deger)");
$deyim->bindParam(':isim', $isim);
$deyim->bindParam(':değer', $değer);
// bir satıra veri girelim
$isim = 'bir';
$değer = 1;
$deyim->execute();
// farklı değerlerle bir satır daha girelim
$isim = 'iki';
$değer = 2;
$deyim->execute();
?>
Örnek 2 - Hazır deyimlerle bağımsız değişken indisine göre veri girişi
Bu örnekte isim
ve deger
alanlarına
bağımsız değişkenlerin indislerine göre bir INSERT sorgusu ile defalarca veri
girilmektedir.
<?php
$deyim = $dbh->prepare("INSERT INTO KUTUK (isim, değer) VALUES (?, ?)");
$deyim->bindParam(1, $isim);
$deyim->bindParam(2, $değer);
// bir satıra veri girelim
$isim = 'bir';
$değer = 1;
$deyim->execute();
// farklı değerlerle bir satır daha girelim
$isim = 'iki';
$değer = 2;
$deyim->execute();
?>
Örnek 3 - Hazır deyimle veri almak
Bu örnekte bir formdan sağlanan bir anahtar değere dayanarak veritabanından veri alınmaktadır. Kullanıcı girdisi otomatik olarak öncelenmekte, dolayısıya bir SQL zerki riski ortaya çıkmamaktadır.
<?php
$deyim = $dbh->prepare("SELECT * FROM KUTUK where isim = ?");
$deyim->execute([$_GET['isim']]);
foreach ($deyim as $satır) {
print_r($satır);
}
?>
Örnek 4 - Bir saklı yordamın çıktı bağımsız değişkeni ile kullanımı
Eğer veritabanı sürücüsü bağımsız değişken ilişkilendirmeyi destekiyorsa bağımsız değişkenleri sadece girdide değil çıktıda da bağımsız değişkenlerle ilişkilendirebilirsiniz. Çıktı bağımsız değişkenlerinin kullanımı girdi bağımsız değişkenlerine göre daha karmaşıktır. Böyle bir durumda ilişkilendirdiğiniz bağımsız değişken sayısını bilmeniz gerekir. Eğer dönen değer önerdiğinizden daha büyükse bir hata oluşur.
<?php
$deyim = $dbh->prepare("CALL sy_dizge_döndürür(?)");
$deyim->bindParam(1, $dönen_değer, PDO::PARAM_STR, 4000);
// saklı yordamı çağıralım
$deyim->execute();
print "dönen değer: $dönen_değer\n";
?>
Örnek 5 - Bir saklı yordamın girdi/çıktı bağımsız değişkeni ile kullanımı
Ayrıca, değerleri tutan bağımsız değişkenleri hem girdi hem de çıktı için kullanabilirsiniz. Sonraki örnekte, saklı yordama 'merhaba' dizgesi aktarılmakta, yordam döndüğünde 'merhaba' yerine yordamın dönüş değeri yerleştirilmektedir.
<?php
$deyim = $dbh->prepare("CALL sy_dizge_alır_dizge_döndürür(?)");
$değer = 'merhaba';
$deyim->bindParam(1, $değer, PDO::PARAM_STR|PDO::PARAM_INPUT_OUTPUT, 4000);
// saklı yordamı çağıralım
$deyim->execute();
print "dönen değer: $değer\n";
?>
Örnek 6 - Geçersiz bağımsız değişken kullanımı
<?php
$deyim = $dbh->prepare("SELECT * FROM KUTUK where isim LIKE '%?%'");
$deyim->execute([$_GET['isim']]);
// bağımsız değişken değerin bütünün yerine kullanılmalı
$deyim = $dbh->prepare("SELECT * FROM KUTUK where isim LIKE ?");
$deyim->execute(["%$_GET[isim]%"]);
?>