CodeBlanks Logo Icon CodeBlanks

Named placeholders

PHP kursu · İleri seviye · Ders 13/92

: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

  1. 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
  2. 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]);
  3. 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.

İleri seviye bölümündeki tüm dersler