PHP
Named placeholders
:name biçiminde adlandırılmış yer tutucularla sorgu yazmayı öğrenirsin.
:isim adlandırılmış yer tutucu
Adlandırılmış yer tutucu, :isim biçiminde yazılır. ? gibi sıraya değil, isme göre eşleşir. Örneğin 'SELECT name FROM products WHERE category = :cat AND price >= :minPrice' sorgusunda :cat ve :minPrice isimli iki yer tutucu vardır.
Çok parametreli sorgularda isim bazlı eşleşme sıra hatasını önler ve okunabilirliği artırır. Her isim benzersiz olmalıdır.
Aynı şablonda ? ve :isim birlikte kullanılmaz; ya hep pozisyonel ya hep adlandırılmış olmalıdır.
execute() ilişkisel dizi alır
Adlandırılmış yer tutucularda execute() bir ilişkisel dizi alır. Anahtarlar yer tutucu isimleriyle birebir eşleşir. Örneğin execute([':cat' => 'kırtasiye', ':minPrice' => 30]) :cat ve :minPrice yer tutucularına değer bağlar.
Anahtar sırası önemli değildir; :minPrice önce yazılsa da sorgu doğru çalışır. Bu, esnekliği artırır.
Eksik ya da fazla anahtar hata fırlatır; her yer tutucu için bir değer verilmelidir.
Uygulama Adlandırılmış yer tutucu ile filtrele
prepare() ile 'SELECT name FROM products WHERE category = :cat AND price >= :minPrice' şablonu hazırla. execute([':cat' => 'kırtasiye', ':minPrice' => 30]) ile çalıştı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
cat AND price >= :minPrice") yaz. $stmt->execute([':cat' => 'kırtasiye', ':minPrice' => 30]) çağır. $rows = $stmt->fetchAll(PDO::FETCH_ASSOC) ile al. foreach ($rows as $row) { echo $row['name'] . "\n"; } yazdır.
Örnek çözüm:
<?php
// :isim adlandırılmış yer tutucular ile sorgu hazırla
$pdo = new PDO('sqlite::memory:');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$pdo->exec("CREATE TABLE products (id INTEGER PRIMARY KEY, name TEXT, category TEXT, price INTEGER)");
$pdo->exec("INSERT INTO products (name, category, price) VALUES ('Kalem', 'kırtasiye', 25)");
$pdo->exec("INSERT INTO products (name, category, price) VALUES ('Defter', 'kırtasiye', 40)");
$stmt = $pdo->prepare("SELECT name FROM products WHERE category = :cat AND price >= :minPrice");
$stmt->execute([':cat' => 'kırtasiye', ':minPrice' => 30]);
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
foreach ($rows as $row) {
echo $row['name'] . "\n";
}
Kendini test et
-
Yer tutucu türlerini eşleştir
- :cat
- Adlandırılmış yer tutucu
- ?
- Pozisyonel yer tutucu
- [':cat' => v]
- execute() ilişkisel dizi
- :minPrice
- İsimle eşleşen anahtar
-
Adlandırılmış execute çağrısını tamamla
$stmt->____([':cat' => 'kırtasiye', ':min' => 30]);
Cevabı göster
$stmt->execute([':cat' => 'kırtasiye', ':min' => 30]);
-
Adlandırılmış yer tutucuların avantajı nedir?
- Sorguyu her zaman daha hızlı çalıştırır
- Daha az parametre yazmayı sağlar
- Sıra yerine isimle eşleşir, okunabilirliği artırır
- Yalnızca UPDATE sorgularında kullanılır
Cevabı göster
Sıra yerine isimle eşleşir, okunabilirliği artırır — Doğru! :isim yer tutucuları sıraya değil isme göre eşleşir; çok parametreli sorgularda okunabilirliği artırır.
Sıradaki ders: Özet - Hazırlanmış sorgular