bindParam, PDOStatement::execute() çalışmadan önce tanımlanmış değer neyse ona göre çalışır. bindValue ise kendisinden önce tanımlı değişken değeri neyse onu çalıştırır.
Basit bir örnek ile açıklayalım.
<?php
$pdo = new PDO('mysql:host=localhost;dbname=testdb', 'username', 'password');
// bindParam ile sorgu
$name = "Hasan Yıldız";
$age = 38;
$stmt = $pdo->prepare("INSERT INTO users (name, age) VALUES (:name, :age)");
$stmt->bindParam(':name', $name, PDO::PARAM_STR);
$stmt->bindParam(':age', $age, PDO::PARAM_INT);
$age = 21; //execute çalışmadan önce değeri değiştirdik. Veritabanına age => 21 olarak eklenecek.
$stmt->execute();
// bindValue ile sorgu
$name = "Hasan Yıldız";
$age = 35;
$stmt = $pdo->prepare("INSERT INTO users (name, age) VALUES (:name, :age)");
$stmt->bindValue(':name', $name, PDO::PARAM_STR);
$stmt->bindValue(':age', $age, PDO::PARAM_INT);
$age = 21; // Burada değişiklik yapmanın bir anlamı yoktur. Veritabanına age => 35 olarak kaydedecek
$stmt->execute();
?>
Esasen gündelik hayatta kullanacağımız bir ayrım yokmuş gibi geliyor bana. Fakat bindvalue daha fazla kullanıyorum.
Bir de PDO içinde kullanabileceğiniz PDO::PARAM tiplerine bakalım isterseniz.
- PDO::PARAM_NULL: NULL değerini belirtir.
- PDO::PARAM_INT: Tam sayı değerini belirtir.
- PDO::PARAM_STR: Metin değerini belirtir.
- PDO::PARAM_LOB: Büyük veri türünü belirtir, örneğin binary veri, text veri, gibi.
- PDO::PARAM_STMT: Başka bir PDOStatement nesnesini belirtir.
- PDO::PARAM_BOOL: Boolean değerini belirtir.
- PDO::PARAM_INPUT_OUTPUT: Giriş ve çıkış için kullanılan veri tipini belirtir.
Yorumlar