<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/book.pdo.inc";
$setup = array (
  'home' => 
  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',
    2 => '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',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="pdo.prepared-statements" class="chapter">
 <h1 class="title">Hazır deyimler ve Saklı Yordamlar</h1>

 <p class="para">
  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:
 </p>
 <ul class="itemizedlist">
  <li class="listitem">
   <span class="simpara">
    Sorgunun tek bir defa çözümlenmesi (veya hazırlanması) gerekir fakat aynı
    veya farklı bağımsız değişkenlerle defalarca çalıştırılabilir. Sorgu hazır
    olduğunda veritabanınca incelenir, derlenip sorgunun amacına uygun olarak
    en iyilenir. Karmaşık sorgularda aynı sorguyu farklı bağımsız değişkenlerle
    defalarca yineleyecekseniz işlemler, uygulamanızı farkedilir şekilde
    yavaşlatacak kadar uzun sürebilir. Hazır deyimleri kullanarak her
    yinelemede tekrarlanan inceleme/derleme/eniyileme döngüsünden
    kurtulabilirsiniz. Özetle, hazır deyimler daha az özkaynak kullandığından
    daha hızlı çalışır.
   </span>
  </li>
  <li class="listitem">
   <span class="simpara">
    Hazır deyim bağımsız değişkenlerinin öncelenmesi gerekmez. Bu işlemi sürücüler
    sizin yerinize yapar. Uygulamanız özellikle hazır deyimleri kullanıyorsa
    hiçbir SQL zerkinin olmayacağından emin olabilirsiniz. (Ancak, sorgunun
    diğer parçaları öncelenmemiş girdiler içeriyorsa hala risk
    altındasınız demektir.)
   </span>
  </li>
 </ul>
 <p class="para">
  Hazır deyimleri kullanmanın bir başka yararı da bunları desteklemeyen
  sürücüler için PDO&#039;nun bu özelliği taklit etmesidir (PDO&#039;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.
 </p>
 <p class="para">
  <div class="example" id="example-1">
   <p><strong>Örnek 1 - Hazır deyimlerle bağımsız değişken ismine göre veri girişi</strong></p>
   <div class="example-contents"><p>
    Bu örnekte <code class="literal">isim</code> ve <code class="literal">deger</code> alanlarına
    bağımsız değişkenlerin isimlerine göre bir INSERT sorgusu ile defalarca veri
    girilmektedir.
   </p></div>
   <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$deyim </span><span style="color: #007700">= </span><span style="color: #0000BB">$dbh</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">prepare</span><span style="color: #007700">(<br />          </span><span style="color: #DD0000">"INSERT INTO KUTUK (isim, deger) VALUES (:isim, :deger)"</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">$deyim</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">bindParam</span><span style="color: #007700">(</span><span style="color: #DD0000">':isim'</span><span style="color: #007700">, </span><span style="color: #0000BB">$isim</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">$deyim</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">bindParam</span><span style="color: #007700">(</span><span style="color: #DD0000">':değer'</span><span style="color: #007700">, </span><span style="color: #0000BB">$değer</span><span style="color: #007700">);<br /><br /></span><span style="color: #FF8000">// bir satıra veri girelim<br /></span><span style="color: #0000BB">$isim </span><span style="color: #007700">= </span><span style="color: #DD0000">'bir'</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$değer </span><span style="color: #007700">= </span><span style="color: #0000BB">1</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$deyim</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">execute</span><span style="color: #007700">();<br /><br /></span><span style="color: #FF8000">// farklı değerlerle bir satır daha girelim<br /></span><span style="color: #0000BB">$isim </span><span style="color: #007700">= </span><span style="color: #DD0000">'iki'</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$değer </span><span style="color: #007700">= </span><span style="color: #0000BB">2</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$deyim</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">execute</span><span style="color: #007700">();<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
   </div>

  </div>
 </p>
 <p class="para">
  <div class="example" id="example-2">
   <p><strong>Örnek 2 - Hazır deyimlerle bağımsız değişken indisine göre veri girişi</strong></p>
   <div class="example-contents"><p>
    Bu örnekte <code class="literal">isim</code> ve <code class="literal">deger</code> alanlarına
    bağımsız değişkenlerin indislerine göre bir INSERT sorgusu ile defalarca veri
    girilmektedir.
   </p></div>
   <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$deyim </span><span style="color: #007700">= </span><span style="color: #0000BB">$dbh</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">prepare</span><span style="color: #007700">(</span><span style="color: #DD0000">"INSERT INTO KUTUK (isim, değer) VALUES (?, ?)"</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">$deyim</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">bindParam</span><span style="color: #007700">(</span><span style="color: #0000BB">1</span><span style="color: #007700">, </span><span style="color: #0000BB">$isim</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">$deyim</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">bindParam</span><span style="color: #007700">(</span><span style="color: #0000BB">2</span><span style="color: #007700">, </span><span style="color: #0000BB">$değer</span><span style="color: #007700">);<br /><br /></span><span style="color: #FF8000">// bir satıra veri girelim<br /></span><span style="color: #0000BB">$isim </span><span style="color: #007700">= </span><span style="color: #DD0000">'bir'</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$değer </span><span style="color: #007700">= </span><span style="color: #0000BB">1</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$deyim</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">execute</span><span style="color: #007700">();<br /><br /></span><span style="color: #FF8000">// farklı değerlerle bir satır daha girelim<br /></span><span style="color: #0000BB">$isim </span><span style="color: #007700">= </span><span style="color: #DD0000">'iki'</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$değer </span><span style="color: #007700">= </span><span style="color: #0000BB">2</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$deyim</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">execute</span><span style="color: #007700">();<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
   </div>

  </div>
 </p>
 <p class="para">
  <div class="example" id="example-3">
   <p><strong>Örnek 3 - Hazır deyimle veri almak</strong></p>
   <div class="example-contents"><p>
    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.
   </p></div>
   <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$deyim </span><span style="color: #007700">= </span><span style="color: #0000BB">$dbh</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">prepare</span><span style="color: #007700">(</span><span style="color: #DD0000">"SELECT * FROM KUTUK where isim = ?"</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">$deyim</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">execute</span><span style="color: #007700">([</span><span style="color: #0000BB">$_GET</span><span style="color: #007700">[</span><span style="color: #DD0000">'isim'</span><span style="color: #007700">]]);<br />foreach (</span><span style="color: #0000BB">$deyim </span><span style="color: #007700">as </span><span style="color: #0000BB">$satır</span><span style="color: #007700">) {<br />    </span><span style="color: #0000BB">print_r</span><span style="color: #007700">(</span><span style="color: #0000BB">$satır</span><span style="color: #007700">);<br />}<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
   </div>

  </div>
 </p>
 <p class="para">
  <div class="example" id="example-4">
   <p><strong>Örnek 4 - Bir saklı yordamın çıktı bağımsız değişkeni ile kullanımı</strong></p>
   <div class="example-contents"><p>
    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.
   </p></div>
   <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$deyim </span><span style="color: #007700">= </span><span style="color: #0000BB">$dbh</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">prepare</span><span style="color: #007700">(</span><span style="color: #DD0000">"CALL sy_dizge_döndürür(?)"</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">$deyim</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">bindParam</span><span style="color: #007700">(</span><span style="color: #0000BB">1</span><span style="color: #007700">, </span><span style="color: #0000BB">$dönen_değer</span><span style="color: #007700">, </span><span style="color: #0000BB">PDO</span><span style="color: #007700">::</span><span style="color: #0000BB">PARAM_STR</span><span style="color: #007700">, </span><span style="color: #0000BB">4000</span><span style="color: #007700">);<br /><br /></span><span style="color: #FF8000">// saklı yordamı çağıralım<br /></span><span style="color: #0000BB">$deyim</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">execute</span><span style="color: #007700">();<br /><br />print </span><span style="color: #DD0000">"dönen değer: </span><span style="color: #0000BB">$dönen_değer</span><span style="color: #DD0000">\n"</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
   </div>

  </div>
 </p>

 <p class="para">
  <div class="example" id="example-5">
   <p><strong>Örnek 5 - Bir saklı yordamın girdi/çıktı bağımsız değişkeni ile kullanımı</strong></p>
   <div class="example-contents"><p>
    Ayrıca, değerleri tutan bağımsız değişkenleri hem girdi hem de çıktı için
    kullanabilirsiniz. Sonraki örnekte, saklı yordama &#039;merhaba&#039; dizgesi
    aktarılmakta, yordam döndüğünde &#039;merhaba&#039; yerine yordamın dönüş değeri
    yerleştirilmektedir.
   </p></div>
   <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$deyim </span><span style="color: #007700">= </span><span style="color: #0000BB">$dbh</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">prepare</span><span style="color: #007700">(</span><span style="color: #DD0000">"CALL sy_dizge_alır_dizge_döndürür(?)"</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">$değer </span><span style="color: #007700">= </span><span style="color: #DD0000">'merhaba'</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$deyim</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">bindParam</span><span style="color: #007700">(</span><span style="color: #0000BB">1</span><span style="color: #007700">, </span><span style="color: #0000BB">$değer</span><span style="color: #007700">, </span><span style="color: #0000BB">PDO</span><span style="color: #007700">::</span><span style="color: #0000BB">PARAM_STR</span><span style="color: #007700">|</span><span style="color: #0000BB">PDO</span><span style="color: #007700">::</span><span style="color: #0000BB">PARAM_INPUT_OUTPUT</span><span style="color: #007700">, </span><span style="color: #0000BB">4000</span><span style="color: #007700">);<br /><br /></span><span style="color: #FF8000">// saklı yordamı çağıralım<br /></span><span style="color: #0000BB">$deyim</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">execute</span><span style="color: #007700">();<br /><br />print </span><span style="color: #DD0000">"dönen değer: </span><span style="color: #0000BB">$değer</span><span style="color: #DD0000">\n"</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
   </div>

  </div>
 </p>
 <p class="para">
  <div class="example" id="example-6">
   <p><strong>Örnek 6 - Geçersiz bağımsız değişken kullanımı</strong></p>
   <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$deyim </span><span style="color: #007700">= </span><span style="color: #0000BB">$dbh</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">prepare</span><span style="color: #007700">(</span><span style="color: #DD0000">"SELECT * FROM KUTUK where isim LIKE '%?%'"</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">$deyim</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">execute</span><span style="color: #007700">([</span><span style="color: #0000BB">$_GET</span><span style="color: #007700">[</span><span style="color: #DD0000">'isim'</span><span style="color: #007700">]]);<br /><br /></span><span style="color: #FF8000">// bağımsız değişken değerin bütünün yerine kullanılmalı<br /></span><span style="color: #0000BB">$deyim </span><span style="color: #007700">= </span><span style="color: #0000BB">$dbh</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">prepare</span><span style="color: #007700">(</span><span style="color: #DD0000">"SELECT * FROM KUTUK where isim LIKE ?"</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">$deyim</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">execute</span><span style="color: #007700">([</span><span style="color: #DD0000">"%</span><span style="color: #0000BB">$_GET</span><span style="color: #007700">[</span><span style="color: #0000BB">isim</span><span style="color: #007700">]</span><span style="color: #DD0000">%"</span><span style="color: #007700">]);<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
   </div>

  </div>
 </p>
</div>
<?php manual_footer($setup); ?>