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.