Signatur
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
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();
}
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;
}
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);
// 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.