bindValue() ile değer bağlama
bindValue() ile değeri parametreye bağlamayı ve bindParam farkını öğrenirsin.
bindValue() değeri anında bağlar
bindValue() bir değeri yer tutucuya anında bağlar. bindParam() gibi referans değil, değerin o anki kopyasını alır. Bu yüzden değişkeni bağladıktan sonra değerini değiştirsen bile sorgu eski değeri kullanır.
Söz dizimi bindValue(1, 30, PDO::PARAM_INT) gibidir; ilk argüman indeks ya da ':isim', ikinci değer, üçüncü tür sabitidir.
Sabit değerlerle tek seferlik sorgu çalıştırırken bindValue() daha uygundur.
bindParam ve bindValue farkı
İki metot benzer görünür ama farklı çalışır. bindParam() değişkeni referans ile bağlar; değer execute() anında okunur. Döngü içinde değişkeni güncelleyerek tekrar tekrar ekleme yapabilirsin.
bindValue() ise değeri bağlandığı anda kopyalar. Değişken sonradan değişse bile sorgu ilk değeri kullanır. Sabit değerlerle tek seferlik sorgu için uygundur.
Yanlış metodu seçmek beklenmeyen sonuçlara yol açabilir; hangisinin gerektiğini görev belirler.
Uygulama bindValue ile fiyat filtrele
prepare() ile 'SELECT name FROM products WHERE price >= ?' şablonu hazırla. bindValue(1, 30, PDO::PARAM_INT) ile değeri anında bağla. execute() çağır, fetchAll(PDO::FETCH_ASSOC) ile tüm satırları al ve her satırın name alanını yazdır.
Örnek çözümü göster
:PARAM_INT) çağır. $stmt->execute() çalıştır. $rows = $stmt->fetchAll(PDO::FETCH_ASSOC) ile al. foreach ($rows as $row) { echo $row['name'] . "\n"; } yazdır.
Örnek çözüm:
<?php
// bindValue ile değeri anında bağla (referans değil)
$pdo = new PDO('sqlite::memory:');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$pdo->exec("CREATE TABLE products (id INTEGER PRIMARY KEY, name TEXT, price INTEGER)");
$pdo->exec("INSERT INTO products (name, price) VALUES ('Kalem', 25)");
$pdo->exec("INSERT INTO products (name, price) VALUES ('Defter', 40)");
$stmt = $pdo->prepare("SELECT name FROM products WHERE price >= ?");
$stmt->bindValue(1, 30, PDO::PARAM_INT);
$stmt->execute();
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
foreach ($rows as $row) {
echo $row['name'] . "\n";
}
Kendini test et
-
bindValue() çağrısını tamamla
$stmt->____(1, 30, PDO::PARAM_INT);Cevabı göster
$stmt->bindValue(1, 30, PDO::PARAM_INT); -
bindValue() ve bindParam() arasındaki temel fark nedir?
- İkisi de tamamen aynıdır
- bindValue referans, bindParam değer alır
- bindValue yalnızca sayılarla çalışır
- bindValue değeri anında kopyalar, bindParam referans tutar
Cevabı göster
bindValue değeri anında kopyalar, bindParam referans tutar — Doğru! bindValue() değeri anında kopyalar; bindParam() referans tutar, değeri execute() anında okur.
-
bindValue ve bindParam farklarını eşleştir
- bindValue()
- Değeri anında kopyalar
- bindParam()
- Referans tutar, geç okur
- PDO::PARAM_INT
- Tamsayı türü
- PDO::PARAM_BOOL
- Mantıksal türü