Start · Sprachen · PHP · Referenz · PDO_SQLITE DSN

PDO_SQLITE DSN

Funktion

Der <code>PDO_SQLITE</code>-DSN definiert die Verbindungszeichenfolge zum Aufbau einer PDO-Verbindung zu einer SQLite-Datenbank.

seit PHP 5.1.0 Kategorie: db

Signatur

sqlite:/path/to/database.db

Beschreibung

Der PDO_SQLITE DSN (Data Source Name) beschreibt, wie PDO eine Verbindung zu einer SQLite-Datenbank herstellt. SQLite ist eine serverlose, dateibasierte Datenbank-Engine, die keine separate Serverinstanz benötigt. Der DSN hat folgendes Format: sqlite:/pfad/zur/datenbank.db.

Es gibt drei Varianten des SQLite-DSN:

  • Dateibasierte Datenbank: sqlite:/absoluter/pfad/zur/datenbank.db – öffnet oder erstellt eine SQLite-Datenbankdatei an dem angegebenen Pfad.
  • In-Memory-Datenbank: sqlite::memory: – erstellt eine flüchtige Datenbank im Arbeitsspeicher, die nach Ende der Verbindung verloren geht. Ideal für Tests und temporäre Berechnungen.
  • Temporäre Datenbank: sqlite: (ohne Pfad) – erstellt eine temporäre Datenbankdatei, die nach dem Schließen der Verbindung gelöscht wird.

Im Gegensatz zu anderen PDO-Treibern wie MySQL oder PostgreSQL benötigt der SQLite-DSN weder Benutzername noch Passwort, da SQLite auf dem Dateisystem-Zugriffsschutz basiert. SQLite eignet sich besonders für Embedded-Anwendungen, Prototypen, kleine Webanwendungen oder als lokaler Datenspeicher.

PDO_SQLITE unterstützt ab SQLite 3 zahlreiche Features wie WAL-Journal-Modus, Foreign Keys (müssen explizit aktiviert werden) und benutzerdefinierte SQL-Funktionen via PDO::sqliteCreateFunction().

Parameter

Name Typ Default Beschreibung
$dsn Pflicht string Der DSN-String im Format sqlite:/pfad/zur/datei.db, sqlite::memory: für eine In-Memory-Datenbank oder sqlite: für eine temporäre Datenbank.
$username string null Wird von SQLite ignoriert; kann null oder leer gelassen werden.
$password string null Wird von SQLite ignoriert; kann null oder leer gelassen werden.
$options array [] Optionales Array mit PDO-Treiberoptionen, z. B. PDO::ATTR_ERRMODE oder SQLite-spezifische Einstellungen.

Rückgabewert

Typ
PDO
Beschreibung
Gibt eine PDO-Instanz zurück, die die Verbindung zur SQLite-Datenbank repräsentiert. Bei Fehler wird eine PDOException geworfen.

Beispiele

Verbindung zu einer dateibasierten SQLite-Datenbank

<?php
try {
    $pdo = new PDO('sqlite:/var/www/myapp/data/database.db');
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    // Foreign Keys explizit aktivieren
    $pdo->exec('PRAGMA foreign_keys = ON;');

    // Tabelle erstellen
    $pdo->exec("
        CREATE TABLE IF NOT EXISTS users (
            id   INTEGER PRIMARY KEY AUTOINCREMENT,
            name TEXT NOT NULL,
            email TEXT UNIQUE NOT NULL
        )
    ");

    // Datensatz einfügen
    $stmt = $pdo->prepare('INSERT INTO users (name, email) VALUES (:name, :email)');
    $stmt->execute([':name' => 'Max Mustermann', ':email' => 'max@example.com']);

    echo 'Datensatz eingefügt, ID: ' . $pdo->lastInsertId();
} catch (PDOException $e) {
    echo 'Fehler: ' . $e->getMessage();
}
Datensatz eingefügt, ID: 1

In-Memory-Datenbank für Unit-Tests

<?php
// Ideal für Tests: schnell, kein Dateisystem, kein Aufräumen nötig
$pdo = new PDO('sqlite::memory:');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);

$pdo->exec('
    CREATE TABLE products (
        id    INTEGER PRIMARY KEY,
        name  TEXT,
        price REAL
    )
');

$pdo->exec("INSERT INTO products (name, price) VALUES ('Apfel', 0.49)");
$pdo->exec("INSERT INTO products (name, price) VALUES ('Banane', 0.99)");

$rows = $pdo->query('SELECT * FROM products ORDER BY price')->fetchAll();
foreach ($rows as $row) {
    echo $row['name'] . ': ' . number_format($row['price'], 2, ',', '') . ' €' . PHP_EOL;
}
Apfel: 0,49 € Banane: 0,99 €

Benutzerdefinierte SQL-Funktion registrieren

<?php
$pdo = new PDO('sqlite::memory:');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

// PHP-Funktion als SQL-Funktion registrieren
$pdo->sqliteCreateFunction('php_upper', 'strtoupper', 1);

$pdo->exec("CREATE TABLE words (word TEXT)");
$pdo->exec("INSERT INTO words VALUES ('hallo'), ('welt')");

$result = $pdo->query("SELECT php_upper(word) AS upper_word FROM words")->fetchAll(PDO::FETCH_COLUMN);
print_r($result);
Array ( [0] => HALLO [1] => WELT )

// Wichtig · Fallstricke

Sicherheit & Dateizugriff: Die Sicherheit einer dateibasierten SQLite-Datenbank hängt vollständig von den Dateisystem-Berechtigungen ab. Stelle sicher, dass die Datenbankdatei nicht im öffentlich erreichbaren Webroot liegt, da sie sonst direkt heruntergeladen werden kann. Speichere sie stets außerhalb des Document-Root.

Parallelzugriff: SQLite ist für gleichzeitige Schreibzugriffe aus mehreren Prozessen nur begrenzt geeignet. Bei hoher Nebenläufigkeit empfiehlt sich der WAL-Modus (PRAGMA journal_mode = WAL;), der gleichzeitige Lese- und Schreibvorgänge besser unterstützt.

Foreign Keys: In SQLite sind Foreign-Key-Constraints standardmäßig deaktiviert. Sie müssen pro Verbindung explizit mit PRAGMA foreign_keys = ON; aktiviert werden.

Pfad unter Windows: Auf Windows-Systemen muss der absolute Pfad mit drei Schrägstrichen angegeben werden, z. B. sqlite:///C:/pfad/zur/datenbank.db.