Show example solution
void { ... }. Inside, start with $pdo = setupDatabase();, add three posts with createPost, print the count with getAllPosts, print the second post's title with getPost(2), update the second post with updatePost, delete the third with deletePost, then list the remaining posts with getAllPosts and foreach. Finally call runBlog();.
Example solution:
<?php
// Blog project: all parts combined — write the runBlog demo
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);
}
function getPost(PDO $pdo, int $id): array {
$stmt = $pdo->prepare("SELECT id, title, content, author FROM posts WHERE id = :id");
$stmt->execute([":id" => $id]);
return $stmt->fetch(PDO::FETCH_ASSOC) ?: [];
}
function updatePost(PDO $pdo, int $id, string $title, string $content, string $author): int {
$stmt = $pdo->prepare("UPDATE posts SET title = :title, content = :content, author = :author WHERE id = :id");
$stmt->execute([":title" => $title, ":content" => $content, ":author" => $author, ":id" => $id]);
return $stmt->rowCount();
}
function deletePost(PDO $pdo, int $id): int {
$stmt = $pdo->prepare("DELETE FROM posts WHERE id = :id");
$stmt->execute([":id" => $id]);
return $stmt->rowCount();
}
function runBlog(): void {
$pdo = setupDatabase();
createPost($pdo, "Opening post", "Hello world", "Alex");
createPost($pdo, "Second post", "Learning PHP PDO", "Mary");
createPost($pdo, "Third post", "Database practice", "Sam");
$posts = getAllPosts($pdo);
echo "Total: " . count($posts) . "\n";
$post = getPost($pdo, 2);
echo $post['title'] . "\n";
updatePost($pdo, 2, "Updated post", "New content", "Mary");
deletePost($pdo, 3);
$posts = getAllPosts($pdo);
foreach ($posts as $p) {
echo $p['title'] . " - " . $p['author'] . "\n";
}
}
runBlog();