CodeBlanks Logo Icon CodeBlanks

execute() ile çalıştırma

PHP kursu · İleri seviye · Ders 9/92

execute() ile hazırlanmış sorguyu parametrelerle çalıştırmayı öğrenirsin.

execute() değer dizisi alır

execute() hazırlanan sorguyu çalıştırır. Yer tutuculara bağlanacak değerleri bir dizi olarak alır. Örneğin execute(['kırtasiye', 30]) iki değeri sırayla iki ? işaretine bağlar.

Dizideki değerlerin sırası, şablondaki ? işaretlerinin soldan sağa sırasıyla birebir eşleşir. Yanlış sıra, yanlış sonuç üretir.

Bu yöntemle birden çok koşulu güvenle birleştirebilirsin; değerler SQL metnine hiçbir zaman doğrudan eklenmez.

Pozisyonel ? yer tutucu

? işareti pozisyonel yer tutucudur: şablonda değişen değerin yerine konur ve sırayla bağlanır. Örneğin 'SELECT name FROM products WHERE category = ? AND price >= ?' sorgusunda iki ? vardır.

İlk ? kategori, ikinci ? fiyat için kullanılır. execute() dizisindeki ilk değer ilk ?'e, ikinci değer ikinci ?'e bağlanır.

Yer tutucu sayısı ile dizi uzunluğu eşit olmalıdır; eksik veya fazla değer hata fırlatır.

Uygulama İki ? yer tutucu ile filtrele

prepare() ile 'SELECT name FROM products WHERE category = ? AND price >= ?' şablonu hazırla. execute(['kırtasiye', 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
:FETCH_ASSOC) ile al. foreach ($rows as $row) { echo $row['name'] . "\n"; } ile yazdır.
Örnek çözüm:
<?php
// execute ile değer dizisi vererek birden çok ? yer tutucuyu çalıştır

$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)");
$pdo->exec("INSERT INTO products (name, category, price) VALUES ('Çikolata', 'yemek', 15)");

$stmt = $pdo->prepare("SELECT name FROM products WHERE category = ? AND price >= ?");
$stmt->execute(['kırtasiye', 30]);
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
foreach ($rows as $row) {
    echo $row['name'] . "\n";
}

Kendini test et

  1. execute() çağrısını tamamla

    $stmt->____(['kırtasiye', 30]);
    Cevabı göster
    $stmt->execute(['kırtasiye', 30]);
  2. execute([5, 'a']) çağrısında parametreler nasıl eşleşir?

    • Anahtar adına göre eşleşir
    • Rastgele sırayla eşleşir
    • ? yer tutucularının soldan sağa sırasına göre
    • Yalnızca ilk değer bağlanır
    Cevabı göster

    ? yer tutucularının soldan sağa sırasına göre — Doğru! Pozisyonel yer tutucular soldan sağa sırayla dizideki değerlerle eşleşir.

  3. Kavramları eşleştir

    ?
    Pozisyonel yer tutucu
    :isim
    Adlandırılmış yer tutucu
    [1, 2]
    execute() değer dizisi
    PDOStatement
    prepare() dönüş türü

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