CodeBlanks Logo Icon CodeBlanks

fetchAll() ile tüm satırlar

PHP kursu · İleri seviye · Ders 5/92

fetchAll() ile sorgu sonucunun tüm satırlarını dizi olarak almayı öğrenirsin.

fetchAll() ile tüm satırlar

fetchAll() bir PDOStatement'den tüm satırları tek seferde bir dizi olarak alır. Her satır bir alt dizi olur; üst dizi üzerinde foreach ile dönersin.

Örnek: $rows = $stmt->fetchAll(PDO::FETCH_ASSOC). Sonra foreach ($rows as $row) { echo $row['name']; } ile her satırı işlersin.

Çok büyük tablolarda bellek riski olabilir; o durumda while + fetch döngüsü tercih edilir.

fetchAll() ve bellek

fetchAll() kullanışlıdır ama büyük tablolarda dikkatli olun. Çünkü tüm satırları aynı anda belleğe yükler; satır sayısı çoksa bellek tüketebilir.

Birkaç yüz satır için idealdir; kod kısa ve okunaktır. On binlerce satırda ise while + fetch döngüsü daha güvenlidir.

Hangisini seçeceğine karar verirken satır sayısını ve bellek sınırını düşün.

Uygulama fetchAll() ile tüm adları yazdır

Bellek içi SQLite'ta users tablosu oluştur, üç kullanıcı ekle. query() ile SELECT name FROM users ORDER BY id çalıştır. fetchAll(PDO::FETCH_ASSOC) ile tüm satırları bir dizi olarak al ve foreach ile her name alanını yazdır.

Örnek çözümü göster
:FETCH_ASSOC); ile tüm satırları al. foreach ($rows as $row) { echo $row['name'] . "\n"; } ile yazdır.
Örnek çözüm:
<?php
$pdo = new PDO('sqlite::memory:');
$pdo->exec("CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT)");
$pdo->exec("INSERT INTO users (name) VALUES ('Ayşe')");
$pdo->exec("INSERT INTO users (name) VALUES ('Ali')");
$pdo->exec("INSERT INTO users (name) VALUES ('Deniz')");
$stmt = $pdo->query("SELECT name FROM users ORDER BY id");
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
foreach ($rows as $row) {
    echo $row['name'] . "\n";
}

Kendini test et

  1. Tüm satırları almak için doğru metodu seç

    <?php
    $pdo = new PDO('sqlite::memory:');
    $pdo->exec("CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT)");
    $pdo->exec("INSERT INTO users (name) VALUES ('Ayşe')");
    $pdo->exec("INSERT INTO users (name) VALUES ('Ali')");
    $stmt = $pdo->query("SELECT name FROM users ORDER BY id");
    $rows = $stmt->____(PDO::FETCH_ASSOC);
    foreach ($rows as $row) {
        echo $row['name'] . "\n";
    }
    ?>
    Cevabı göster
    <?php
    $pdo = new PDO('sqlite::memory:');
    $pdo->exec("CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT)");
    $pdo->exec("INSERT INTO users (name) VALUES ('Ayşe')");
    $pdo->exec("INSERT INTO users (name) VALUES ('Ali')");
    $stmt = $pdo->query("SELECT name FROM users ORDER BY id");
    $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
    foreach ($rows as $row) {
        echo $row['name'] . "\n";
    }
    ?>
  2. fetchAll kavramlarını eşleştir

    fetchAll()
    Tüm satırları alır
    fetch()
    Tek satır alır
    foreach
    fetchAll ile kullanılır
    while
    fetch ile kullanılır
  3. Çok büyük tabloda tüm satırları okurken hangisi tercih edilir?

    • fetchAll() ile tek seferde al
    • while + fetch() ile satır satır oku
    • query() yerine exec() kullan
    • fetch() yerine getAttribute() çağır
    Cevabı göster

    while + fetch() ile satır satır oku — Doğru. Büyük tablolarda while + fetch satır satır okuyarak belleği korur.

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