CodeBlanks Logo Icon CodeBlanks

Veritabanı yapısı

PHP kursu · İleri seviye · Ders 23/92

posts tablosunu ve PDO bağlantısını oluşturursun.

Bellek içi veritabanı ile başlamak

Blog projesinde veriyi SQLite bellek içi veritabanı ile tutacaksın. Bunun için new PDO("sqlite::memory:") ile bir PDO bağlantısı açarsın. ::memory: son eki verinin dosyaya değil işlem belleğine yazılmasını söyler; böylece her test çalıştırmasında temiz bir tabloyla başlarsın ve dosya oluşturmazsın.

Bağlantıyı kurduktan sonra $pdo->exec() ile bir CREATE TABLE ifadesi çalıştırır ve posts tablosunu oluşturursun. Bu tabloda her yazının id, title, content ve author alanları olur.

posts tablosunu oluşturmak

setupDatabase() fonksiyonu bağlantıyı kurar ve tabloyu hazırlar. Tablo yapısı: id birincil anahtar (otomatik artan), title, content ve author ise metin alanlarıdır. DDL ifadelerini çalıştırmak için $pdo->exec() kullanırsın; bu yöntem prepare kadar esnek değildir ama tablo tanımı için uygundur.

Hataları erken yakalamak için $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION) yazarsın; böylece hatalu bir sorgu istisna fırlatır ve sessizce geçmez.

Uygulama setupDatabase fonksiyonunu yaz

Bir setupDatabase(): PDO fonksiyonu yaz. İçinde new PDO("sqlite::memory:") ile bağlan, setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION) ile hata modunu ayarla, $pdo->exec("CREATE TABLE posts (...)") ile posts tablosunu oluştur ve return $pdo; ile döndür. Tabloda id (birincil anahtar), title, content ve author alanları olsun. Demodaki çıktıyı üret.

Örnek çözümü göster
PDO { ... } yaz. İçinde $pdo = new PDO("sqlite::memory:"); ile bağlan, $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); ile hata modunu ayarla, $pdo->exec("CREATE TABLE posts (id INTEGER PRIMARY KEY AUTOINCREMENT, title TEXT NOT NULL, content TEXT NOT NULL, author TEXT NOT NULL)"); ile tabloyu oluştur ve return $pdo; döndür.
Örnek çözüm:
<?php
// Blog projesi: BlogPost sınıfı + setupDatabase

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

// Demo:
$pdo = setupDatabase();
$count = $pdo->query("SELECT COUNT(*) FROM posts")->fetchColumn();
echo "Kayıt: " . $count;

Kendini test et

  1. sqlite::memory: ne zaman kullanışlıdır?

    • Dosya oluşturmadan hızlı test yapmak için
    • Her testte temiz bir tabloyla başlamak için
    • Kalıcı bir dosya veritabanı kurmak için
    • Uzak sunucuya bağlanmak için
    Cevabı göster

    Her testte temiz bir tabloyla başlamak için — Doğru. Bellek içi veritabanı her çalıştırmada sıfırdan başlar; testler deterministik olur.

  2. DSN dizesini tamamla

    $pdo = new PDO("____");
    Cevabı göster
    $pdo = new PDO("sqlite::memory:");
  3. PDO yöntemlerini eşleştir

    new PDO
    Bağlantı kurar
    ->exec
    DDL çalıştırır
    ->prepare
    Hazırlar sorgu
    ->fetchAll
    Tüm satırları alır

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