Hazır deyimler, SQL için önceden derlenmiş şablonlardır.MySQL 5.0 versiyonunda esnekliği ve güvenliği artırmak için tanıtıldı.Bu deyimlerin getirdiği avantajları sıralayalım.

  • Yüksek performans
  • SQL İnjection önleme
  • Blobları işlerken bellek tasarrufu

Yüksek performans olayını biraz açıklayalım.Diyelim bir sorgumuz var.Bu sorgu veritabanı tarafından önce çözümlenir sonra derlenir daha sonrada bize cevap verir.Aynı sorgu için mesela kullanıcı tablosundan “where=cihan” şartıyla tüm bilgileri getiren bir sorguda sadece şartı değiştirdiğimizde bile bu sorgu herdefasında çözümlenecek, derlenecek buda bize gözle görülür bir yavaşlık getirecek.İşte prepared statements bu sorunu ortadan kaldırır.Bir defa derlenir çok kez çalıştırılır buda bize performans artışı sağlar.

Prepared Statements (Hazır Deyimler) Temelleri

Şimdi bu hazır deyimleri bir örnekte kullanarak konuya biraz daha giriş yapalım.Aşağıdaki örnekte bir prepared statements oluşturduk ,çalıştırdık ve sonuçları getirttik.

<?
$mysqli = new mysqli("localhost", "un" "pwd", "db");

if (mysqli_connect_errno()) {

echo("Failed to connect, the error message is : ".

mysqli_connect_error());

exit();
}
$stmt = $mysqli ->prepare("select name, pass from users
order by name");
$stmt->execute();

$stmt->bind_result($name, $pass);
while ($stmt->fetch())
{
echo $name."<br/>";
}
?>

Şimdi yukarıdaki örneğimizde neler olduğuna bir bakalım.

  1. Bu kod parçacığı ile sorguyu hazırladık.
    $stmt = $mysqli->prepare(“select name, pass from users order by name”);
  2. Sonra çalıştırdık.
    $stmt->execute();
  3. Sorgumuzdaki name,pass gibi almak istediğimiz değerleri aşağıdaki komutta bulunan parametrelerle bağladık.
    $stmt->bind_result($name, $pass);
  4. Ve en son sorgunun döndürdüğü değeri getirdik.
    $stmt->fetch()

Değişkenlerle Prepared Statements (Hazır Deyimlerin) Kullanımı

Hazır deyimlerin avantajı sorgularda değişkenlerin kullanılabilmesidir.Mesela aşağıdaki örnekte “where” ile şart koşacağımız alanı daha sonra belirlemek üzere “?” operatörünü koyuyoruz.Örneğe bakalım;

<?
$mysqli = new mysqli("localhost", "un" "pwd", "db");

if (mysqli_connect_errno()) {

echo("Failed to connect, the error message is : ".

mysqli_connect_error());

exit();

}

$stmt = $mysqli->prepare("select name, pass from users
where name=?");

$stmt->bind_param("s",$name);

$name = "tipu";

$stmt->execute();

$name=null;

$stmt->bind_result($name, $pass);

while ($r = $stmt->fetch())
{

echo $pass."<br/>";
}
?>

“bind_params()” fonksiyonu ile name şartının bir string olduğunu belirttik.İlişkili parametrelerin veri tiplerini belirlemeniz lazım.Burada yaptığımızda veri tipini belirlemekti.
MySQL de hazır deyimlerin desteklediği 4 tip veri türü vardır.

  • i, integer değişken olduğunu belirtir.
  • d, double değişken olduğunu belirtir.
  • s, string değişken olduğunu belirtir.
  • b, blob değişken olduğunu belirtir.

Bizim parametremiz bir stringti.Biz parametre ilişkilendirme işini aşağıdaki satırla yaptık.

$stmt->bind_param("s",$name);

Değişkeni ilişkilendirdikten sonra sıra $name için değer ayarlamaya ve execute() fonksiyonu ile sorguyu yürütmeye geldi.Sorguyu yürüttükten sonra bind_result($name,$pass) fonksiyonun içindeki parametreleri sorgudaki alanlarla(name,pass) bağlıyoruz.Ve en son işlem sorguda almak istediğimiz değişkenleri fetch() fonksiyonu ile alıyoruz.

Önümüzdeki hafta PDO’nun güvenliğinden ve prepared statements (hazır deyimlerin) pdo da kullanımından bahsedeceğim.Anlatımımda bir yanlışk olduysa yorum atarak belirtebilirsiniz.

Share on FacebookTweet about this on TwitterShare on LinkedInShare on Google+Share on TumblrEmail this to someone