execute() ile çalıştırma
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
-
execute() çağrısını tamamla
$stmt->____(['kırtasiye', 30]);Cevabı göster
$stmt->execute(['kırtasiye', 30]); -
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.
-
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ü