CRUD İşlemleri 2: Veri Listeleme ve Filtreleme (Select)

  • Konbuyu başlatan Konbuyu başlatan irfo
  • Başlangıç tarihi Başlangıç tarihi

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.

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-&gt;query(&quot;SELECT id, kullanici_adi, eposta FROM uyeler ORDER BY id DESC&quot;);

// Tüm verileri dizi olarak alalım
$uyeler = $sorgu-&gt;fetchAll();

if ($uyeler) {
    echo &quot;&lt;ul&gt;&quot;;
    foreach ($uyeler as $uye) {
        echo &quot;&lt;li&gt;ID: {$uye[&#39;id&#39;]} - Kullanıcı: {$uye[&#39;kullanici_adi&#39;]} ({$uye[&#39;eposta&#39;]})&lt;/li&gt;&quot;;
    }
    echo &quot;&lt;/ul&gt;&quot;;
} else {
    echo &quot;Henüz kayıtlı üye bulunmuyor.&quot;;
}

} 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​


ÖzellikYöntemNeden Kullanılır?
Sütun SeçimiSELECT * yerine sütun adlarıGereksiz veri trafiğini önler, hızı artırır.
SıralamaORDER BY sütun_adi DESCVerilerin anlamlı bir sırada gelmesini sağlar.
LimitlendirmeLIMIT 10, 20Sayfalama (Pagination) yaparak sunucuyu yormaz.
GüvenlikPrepare & ExecuteSQL 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)!
 
Geri
Üst