Tema 19

PHP y SQLite (Bases de Datos Ligeras y en Memoria)

Aprende a utilizar SQLite en PHP: bases de datos relacionales embebidas, almacenamiento en archivo o en memoria (:memory:), sin requerir servidor externo ni configuración compleja.

¿Qué es SQLite y por qué es tan especial?

SQLite es el motor de base de datos SQL más desplegado en el mundo. A diferencia de MySQL, PostgreSQL o SQL Server, SQLite no es un proceso de servidor independiente (serverless), sino una biblioteca autocontenida que se embebe directamente en el propio proceso de PHP.

⚡

Cero Configuración

No requiere instalar demonios, ni configurar puertos, ni crear usuarios ni contraseñas.

📁

Archivo Único en Disco

Toda la base de datos (tablas, índices, disparadores y datos) se almacena en un solo fichero normal.

🧠

Modo en Memoria

Puede operar al 100% en RAM con :memory: a velocidades astronómicas, ideal para pruebas unitarias.

1. Conexión con PDO SQLite en PHP

El driver pdo_sqlite viene preinstalado y activado por defecto en prácticamente cualquier instalación moderna de PHP. Dispone de dos modos de trabajo principales:

Modo A: Base de Datos Persistente en Archivo

// La ruta absoluta al archivo .sqlite o .db en el disco
$rutaDb = __DIR__ . '/almacen/datos.db';

$pdo = new PDO('sqlite:' . $rutaDb, null, null, [
    PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
]);

// Si el archivo no existe, SQLite lo crea automáticamente al conectarse

Modo B: Base de Datos Efímera en Memoria RAM (Ultra Rápida)

// El DSN 'sqlite::memory:' crea una base de datos 100% en memoria
$pdo = new PDO('sqlite::memory:', null, null, [
    PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
]);

// Al finalizar el script de PHP, la memoria se libera automáticamente

2. Cuándo Elegir SQLite vs MySQL

Criterio SQLite MySQL / MariaDB
Arquitectura Embebida (sin red ni proceso daemon). Cliente-Servidor (TCP/IP o sockets Unix).
Configuración Inmediata (Zero-config). Requiere instalación, tuning y mantenimiento.
Escrituras Concurrentes Bloqueo a nivel de archivo (una sola escritura a la vez). Bloqueo granular por fila con InnoDB (alta concurrencia masiva).
Casos de Uso Ideales Sitios con tráfico medio/bajo, prototipos, tests unitarios en CI/CD, microservicios, utilidades CLI. Plataformas SaaS multinivel, tiendas de comercio electrónico de alto tráfico, clustering y replicación.

3. La Clase Nativa SQLite3 en PHP

Además de PDO, PHP incluye una extensión orientada a objetos específica llamada SQLite3:

// Uso directo sin PDO
$db = new SQLite3(':memory:');

// Ejecución de comandos DDL (crear tabla)
$db->exec("CREATE TABLE registros (id INTEGER PRIMARY KEY, accion TEXT, ip TEXT)");

// Consultas preparadas nativas
$stmt = $db->prepare("INSERT INTO registros (accion, ip) VALUES (:accion, :ip)");
$stmt->bindValue(':accion', 'Login exitoso', SQLITE3_TEXT);
$stmt->bindValue(':ip', '192.168.1.10', SQLITE3_TEXT);
$stmt->execute();

// Consulta y lectura de resultados
$resultado = $db->query("SELECT * FROM registros");
while ($fila = $resultado->fetchArray(SQLITE3_ASSOC)) {
    echo $fila['accion'] . " desde " . $fila['ip'] . "<br>";
}
🦉
¿Tienes dudas con este tema?
Sócrates AI puede darte analogías y explicarte este código paso a paso.

🚀 ¿Quieres dominar Manual Completo de PHP y crear proyectos reales?

Aprende arquitectura limpia, desarrollo web moderno, buenas prácticas y despliegue en producción con nuestro Bootcamp Fullstack Developer con mentorías en vivo.

🏛️ Autoría y Propiedad Intelectual: Obra educativa original de David Amador para Kilopolis Academia (Solucionáticos), estructurada sobre las especificaciones y estándares abiertos del W3C, el estándar vivo de WHATWG y la documentación oficial de código abierto. © Todos los derechos reservados.