Start · Sprachen · PHP · Referenz · Pdo\Sqlite

Pdo\Sqlite

Klasse

Spezialisierte PDO-Unterklasse für SQLite-Verbindungen mit dediziertem SQL-Parser und SQLite-spezifischen Methoden.

seit PHP 8.4.0 Kategorie: db

Signatur

class Pdo\Sqlite extends PDO

Beschreibung

Pdo\Sqlite ist eine seit PHP 8.4 verfügbare, dedizierte Unterklasse von PDO, die speziell für die Arbeit mit SQLite-Datenbanken ausgelegt ist. Sie bietet gegenüber der generischen PDO-Klasse einen eigenen SQL-Parser, der den SQLite-Dialekt vollständig versteht, sowie zusätzliche, SQLite-spezifische Methoden, die über die generische PDO-Schnittstelle nicht erreichbar sind.

Mit Pdo\Sqlite lassen sich benutzerdefinierte SQL-Funktionen, Aggregate und Kollationen direkt in PHP registrieren. Dadurch können komplexe Berechnungen oder Textverarbeitungen in vertrautem PHP-Code implementiert und nahtlos in SQLite-Abfragen verwendet werden. Dies ist besonders nützlich, wenn SQLite als eingebettete Datenbank in Desktop-Anwendungen, Testsystemen oder kleinen Webanwendungen eingesetzt wird.

Die Klasse unterstützt außerdem SQLite-spezifische Features wie das Öffnen von In-Memory-Datenbanken (:memory:), das Laden externer SQLite-Erweiterungen sowie das Erstellen eigener skalarer und aggregierter Funktionen über Methoden wie createFunction(), createAggregate() und createCollation().

Da Pdo\Sqlite von PDO erbt, ist sie vollständig kompatibel mit bestehendem PDO-Code und erlaubt einen einfachen Umstieg ohne größere Refaktorierungen. Sie sollte immer dann bevorzugt werden, wenn sqlite als PDO-Treiber genutzt wird und SQLite-spezifische Funktionalität benötigt wird.

Parameter

Name Typ Default Beschreibung
$dsn Pflicht string Der Data Source Name für die SQLite-Verbindung, z. B. sqlite:/pfad/zur/datei.db oder sqlite::memory: für eine In-Memory-Datenbank.
$username string|null null Für SQLite nicht relevant; wird ignoriert. Kann leer gelassen oder auf null gesetzt werden.
$password string|null null Für SQLite nicht relevant; wird ignoriert. Kann leer gelassen oder auf null gesetzt werden.
$options array|null null Assoziatives Array mit PDO-Treiber-Optionen, z. B. PDO::ATTR_ERRMODE oder SQLite-spezifische Optionen wie PDO::SQLITE_ATTR_OPEN_FLAGS.

Beispiele

Verbindung zu einer SQLite-Datei und einfache Abfrage

<?php

use Pdo\Sqlite;

$db = new Sqlite('sqlite:/tmp/beispiel.db');

$db->exec('CREATE TABLE IF NOT EXISTS nutzer (id INTEGER PRIMARY KEY, name TEXT)');
$db->exec("INSERT INTO nutzer (name) VALUES ('Alice'), ('Bob')");

$stmt = $db->query('SELECT id, name FROM nutzer ORDER BY id');
foreach ($stmt as $row) {
    echo $row['id'] . ': ' . $row['name'] . PHP_EOL;
}
1: Alice 2: Bob

Benutzerdefinierte PHP-Funktion in SQLite registrieren

<?php

use Pdo\Sqlite;

$db = new Sqlite('sqlite::memory:');

// Eigene SQL-Funktion registrieren, die Strings in Großbuchstaben umwandelt
$db->createFunction('php_upper', fn(string $s): string => strtoupper($s), 1);

$db->exec('CREATE TABLE worte (wort TEXT)');
$db->exec("INSERT INTO worte VALUES ('hallo'), ('welt')");

$stmt = $db->query('SELECT php_upper(wort) AS gross FROM worte');
foreach ($stmt as $row) {
    echo $row['gross'] . PHP_EOL;
}
HALLO WELT

In-Memory-Datenbank mit Fehlerbehandlung

<?php

use Pdo\Sqlite;

try {
    $db = new Sqlite(
        dsn: 'sqlite::memory:',
        options: [
            PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
            PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
        ]
    );

    $db->exec('CREATE TABLE produkte (id INTEGER PRIMARY KEY, preis REAL)');
    $db->exec('INSERT INTO produkte (preis) VALUES (9.99), (4.49), (19.95)');

    $stmt = $db->query('SELECT AVG(preis) AS durchschnitt FROM produkte');
    $result = $stmt->fetch();
    echo 'Durchschnittspreis: ' . number_format($result['durchschnitt'], 2, ',', '.') . ' €';
} catch (\PDOException $e) {
    echo 'Datenbankfehler: ' . $e->getMessage();
}
Durchschnittspreis: 11,48 €

// Wichtig · Fallstricke

Verfügbarkeit: Pdo\Sqlite ist erst ab PHP 8.4 verfügbar. In älteren PHP-Versionen muss weiterhin die generische PDO-Klasse mit dem sqlite:-DSN verwendet werden. Methoden wie createFunction() und createAggregate() standen dort über die veraltete SQLite3-Klasse oder als PDO-spezifische Erweiterungen zur Verfügung.

Sicherheit: SQLite-Datenbankdateien sollten außerhalb des öffentlich zugänglichen Web-Roots gespeichert werden, damit sie nicht direkt heruntergeladen werden können. Benutzereingaben sind stets über vorbereitete Statements (prepare()/execute()) zu verarbeiten, um SQL-Injection zu vermeiden.

Parallelzugriff: SQLite ist für Szenarien mit vielen gleichzeitigen Schreibzugriffen nicht geeignet. Bei hoher Last sollte auf eine vollwertige Datenbank wie MySQL oder PostgreSQL gewechselt werden.