CodeBlanks Logo Icon CodeBlanks

Post ekleme ve listeleme

PHP kursu · İleri seviye · Ders 24/92

INSERT ve SELECT ile post ekleyip listeleme yaparsın.

prepare ve execute ile yazı eklemek

Yeni bir blog yazısı eklemek için INSERT sorgusu hazırlarsın. Önce $pdo->prepare("INSERT INTO posts ...") ile bir ifade nesnesi oluşturursun; sonra $stmt->execute([...]) ile adlandırılmış parametreleri bağlayıp sorguyu çalıştırırsın. Bu yöntem SQL enjeksiyonuna karşı güvenlidir çünkü değerler dize olarak değil parametre olarak gönderilir.

Eklenen satırın kimliğini almak için $pdo->lastInsertId() kullanırsın; bu değer tamsayıya dönüştürülüp döndürülür.

Tüm yazıları listelemek

Tüm blog yazılarını çekmek için SELECT sorgusu çalıştırırsın. Parametre içermeyen sorgularda $pdo->query() doğrudan bir ifade nesnesi döndürür; ardından $stmt->fetchAll(PDO::FETCH_ASSOC) ile her satırı sütun adlarıyla ilişkisel dizi olarak alırsın. Sonuç bir dizi döner ve foreach ile gezilir.

Sıralama için ORDER BY id eklersin; böylece yazılar ekleme sırasına göre listelenir.

Uygulama createPost ve getAllPosts fonksiyonlarını yaz

createPost(PDO $pdo, string $title, string $content, string $author): int yaz. İçinde prepare("INSERT INTO posts (title, content, author) VALUES (:title, :content, :author)") yap, execute([":title" => $title, ...]) ile çalıştır ve return (int) $pdo->lastInsertId(); döndür. getAllPosts(PDO $pdo): array yaz: query("SELECT id, title, content, author FROM posts ORDER BY id") yap ve return $stmt->fetchAll(PDO::FETCH_ASSOC); döndür. Demodaki çıktıyı üret.

Örnek çözümü göster
int { ... } yaz. İçinde $stmt = $pdo->prepare("INSERT INTO posts (title, content, author) VALUES (:title, :content, :author)"); yaz, $stmt->execute([":title" => $title, ":content" => $content, ":author" => $author]); ile çalıştır ve return (int) $pdo->lastInsertId(); döndür. function getAllPosts(PDO $pdo): array { ... } yaz. İçinde $stmt = $pdo->query("SELECT id, title, content, author FROM posts ORDER BY id"); yaz ve return $stmt->fetchAll(PDO::FETCH_ASSOC); döndür.
Örnek çözüm:
<?php
// Blog projesi: BlogPost + setupDatabase + createPost + getAllPosts

class BlogPost {
    public string $title = "";
    public string $content = "";
    public string $author = "";
}

function setupDatabase(): PDO {
    $pdo = new PDO("sqlite::memory:");
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $pdo->exec("CREATE TABLE posts (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        title TEXT NOT NULL,
        content TEXT NOT NULL,
        author TEXT NOT NULL
    )");
    return $pdo;
}

function createPost(PDO $pdo, string $title, string $content, string $author): int {
    $stmt = $pdo->prepare("INSERT INTO posts (title, content, author) VALUES (:title, :content, :author)");
    $stmt->execute([":title" => $title, ":content" => $content, ":author" => $author]);
    return (int) $pdo->lastInsertId();
}

function getAllPosts(PDO $pdo): array {
    $stmt = $pdo->query("SELECT id, title, content, author FROM posts ORDER BY id");
    return $stmt->fetchAll(PDO::FETCH_ASSOC);
}

// Demo:
$pdo = setupDatabase();
createPost($pdo, "İlk yazım", "Merhaba dünya", "Ayşe");
createPost($pdo, "İkinci yazım", "Selam", "Alex");
$posts = getAllPosts($pdo);
foreach ($posts as $p) {
    echo $p['title'] . " - " . $p['author'] . "\n";
}

Kendini test et

  1. fetchAll çağrısını tamamla

    return $stmt->fetchAll(____);
    Cevabı göster
    return $stmt->fetchAll(PDO::FETCH_ASSOC);
  2. INSERT için neden prepare + execute kullanırız?

    • Sorguyu daha hızlı yapar
    • Tabloyu otomatik oluşturur
    • SQL enjeksiyonuna karşı güvenli parametre bağlama sağlar
    • Sonuçları otomatik yazdırır
    Cevabı göster

    SQL enjeksiyonuna karşı güvenli parametre bağlama sağlar — Doğru. prepare + execute değerleri parametre olarak gönderir; SQL enjeksiyonunu engeller.

  3. INSERT ve SELECT kavramlarını eşleştir

    INSERT INTO
    Yeni satır ekler
    SELECT ... FROM
    Satırları okur
    ->execute
    Sorguyu çalıştırır
    :title
    Adlandırılmış parametre

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