PHP
Post ekleme ve listeleme
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
-
fetchAll çağrısını tamamla
return $stmt->fetchAll(____);
Cevabı göster
return $stmt->fetchAll(PDO::FETCH_ASSOC);
-
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.
-
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
Sıradaki ders: Post düzenleme ve silme