irfo
Moderatör
- Katılım
- 7 Ocak 2026
- Mesajlar
- 290
- Tepkime puanı
- 2
- Puanları
- 18
Veritabanından veri çekmek, bir web sitesinin en çok gerçekleştirdiği işlemdir. Bir forumun ana sayfasındaki konu listesi veya bir kullanıcının profil sayfası, arka planda çalışan SELECT sorgularının bir sonucudur. Bu rehberde, verileri güvenli bir şekilde çekmeyi, döngüye sokmayı ve filtrelemeyi öğreneceğiz.
Veritabanındaki bir tablonun tüm satırlarını çekip ekrana yazdırmak için fetchAll() metodunu kullanırız.
Genellikle tüm verileri değil, belirli bir kritere uyan verileri isteriz. Kullanıcıdan gelen bir ID veya arama terimi ile filtreleme yaparken mutlaka Prepared Statements kullanmalısınız.
Forumunuzda bir üye arama motoru yapmak isterseniz LIKE operatörünü kullanmanız gerekir.
Veri listeleme, uygulamanızın vitrinidir. PDO'nun sunduğu güvenli yöntemlerle verileri çekmek, sadece güvenliğinizi sağlamakla kalmaz, aynı zamanda veritabanı performansınızı da optimize eder. Unutmayın; her zaman sadece ihtiyacınız olan sütunları çağırın (SELECT * yerine SELECT id, ad)!
1. Tüm Verileri Listeleme (fetchAll)
Veritabanındaki bir tablonun tüm satırlarını çekip ekrana yazdırmak için fetchAll() metodunu kullanırız.
PHP:
<?php
require_once 'Database.php';
try {
$db = Database::getInstance()->getConnection();
// Sorguyu hazırlayalım
$sorgu = $db->query("SELECT id, kullanici_adi, eposta FROM uyeler ORDER BY id DESC");
// Tüm verileri dizi olarak alalım
$uyeler = $sorgu->fetchAll();
if ($uyeler) {
echo "<ul>";
foreach ($uyeler as $uye) {
echo "<li>ID: {$uye['id']} - Kullanıcı: {$uye['kullanici_adi']} ({$uye['eposta']})</li>";
}
echo "</ul>";
} else {
echo "Henüz kayıtlı üye bulunmuyor.";
}
} catch (PDOException $e) {
echo "Hata: " . $e->getMessage();
}
?>
2. Veri Filtreleme (WHERE Kullanımı)
Genellikle tüm verileri değil, belirli bir kritere uyan verileri isteriz. Kullanıcıdan gelen bir ID veya arama terimi ile filtreleme yaparken mutlaka Prepared Statements kullanmalısınız.
PHP:
$arananId = 5;
// Güvenli filtreleme yöntemi
$stmt = $db->prepare("SELECT * FROM uyeler WHERE id = :id");
$stmt->execute(['id' => $arananId]);
$uye = $stmt->fetch(); // Tek bir satır beklediğimiz için fetch() yeterli
if ($uye) {
echo "Bulunan Üye: " . $uye['kullanici_adi'];
}
3. Gelişmiş Filtreleme: LIKE ile Arama Yapma
Forumunuzda bir üye arama motoru yapmak isterseniz LIKE operatörünü kullanmanız gerekir.
PHP:
$aramaTerimi = "yazilim";
$parametre = "%" . $aramaTerimi . "%";
$sorgu = $db->prepare("SELECT * FROM uyeler WHERE kullanici_adi LIKE ?");
$sorgu->execute([$parametre]);
$sonuclar = $sorgu->fetchAll();
foreach ($sonuclar as $satir) {
echo "Eşleşen: " . $satir['kullanici_adi'] . "
";
}
SELECT Sorgularında Performans ve Güvenlik Tablosu
| Özellik | Yöntem | Neden Kullanılır? |
|---|---|---|
| Sütun Seçimi | SELECT * yerine sütun adları | Gereksiz veri trafiğini önler, hızı artırır. |
| Sıralama | ORDER BY sütun_adi DESC | Verilerin anlamlı bir sırada gelmesini sağlar. |
| Limitlendirme | LIMIT 10, 20 | Sayfalama (Pagination) yaparak sunucuyu yormaz. |
| Güvenlik | Prepare & Execute | SQL Injection saldırılarını %100 engeller. |
4. fetch() vs fetchAll() Farkı Nedir?
[] fetch(): Sorgu sonucundan sadece sıradaki tek bir satırı çeker. Bir döngü (while) içinde kullanılarak bellek tasarrufu sağlanabilir.
[] fetchAll(): Tüm sonuçları bir kerede belleğe (bir diziye) yükler. Küçük veri setleri için pratiktir ancak binlerce satırlık tabloda RAM kullanımını artırabilir.
Sonuç
Veri listeleme, uygulamanızın vitrinidir. PDO'nun sunduğu güvenli yöntemlerle verileri çekmek, sadece güvenliğinizi sağlamakla kalmaz, aynı zamanda veritabanı performansınızı da optimize eder. Unutmayın; her zaman sadece ihtiyacınız olan sütunları çağırın (SELECT * yerine SELECT id, ad)!