# Database Manager Back Office — Adminer para PrestaShop: instalación, configuración, solución de problemas

> El módulo Database Manager Back Office (referencia interna dfdbmanager) integra Adminer 5.4.2 directamente en el back office de PrestaShop 8 y 9. Sin necesidad de cPanel ni de phpMyAdmin externo:…

- Página: <https://www.datafirefly.com/es/documentation/database-manager-adminer-prestashop/>
- Idioma: es
- Actualizado el: 2026-08-05
- Otros idiomas: [fr](https://www.datafirefly.com/documentation/database-manager-adminer-prestashop/index.md), [en](https://www.datafirefly.com/en/documentation/database-manager-adminer-prestashop/index.md), [de](https://www.datafirefly.com/de/documentation/database-manager-adminer-prestashop/index.md), [it](https://www.datafirefly.com/it/documentation/database-manager-adminer-prestashop/index.md), [pl](https://www.datafirefly.com/pl/documentation/database-manager-adminer-prestashop/index.md), [pt](https://www.datafirefly.com/pt/documentation/database-manager-adminer-prestashop/index.md), [nl](https://www.datafirefly.com/nl/documentation/database-manager-adminer-prestashop/index.md)
- Índice: <https://www.datafirefly.com/es/documentation/llms.txt>

El módulo **Database Manager Back Office** (referencia interna `dfdbmanager`) integra Adminer 5.4.2 directamente en el back office de PrestaShop 8 y 9. Sin necesidad de cPanel ni de phpMyAdmin externo: un clic en el menú _Parámetros Avanzados > Adminer_ y gestionas tu base de datos, ya autenticado.

**En una frase** — instala el ZIP, abre el menú Adminer, gestiona tu BDD. El auto-login utiliza las credenciales de la tienda, el acceso está restringido al perfil SuperAdmin.

## Requisitos previos

- **PrestaShop**: 8.0.0 a 9.99.99 (probado en 8.0, 8.1, 8.2, 9.0)
- **PHP**: 7.4 o superior (compatible con 8.0, 8.1, 8.2, 8.3)
- **Base de datos**: MySQL 5.7+ o MariaDB 10.3+
- **Cuenta de empleado**: perfil SuperAdmin (id_profile = 1) para abrir Adminer
- **Hosting**: compatible con hosting compartido (o2switch, OVH, Infomaniak), VPS, dedicado

No se requiere ninguna conexión saliente desde tu servidor: Adminer 5.4.2 está empaquetado en el ZIP del módulo (508 KB, archivo único).

## Instalación

### 1. Subir el ZIP

En tu back office PrestaShop:

1. Ve a _Módulos > Gestor de Módulos_
2. Haz clic en _Subir un módulo_ en la parte superior derecha
3. Arrastra y suelta el archivo `dfadminer-1.0.0.zip` o haz clic para seleccionarlo
4. Espera a que termine la subida (unos segundos — el ZIP pesa menos de 400 KB)
5. El módulo se instala automáticamente

### 2. Verificar la pestaña del menú

La instalación crea automáticamente una pestaña de menú en _Parámetros Avanzados > Adminer_, con un icono Material storage. La pestaña se crea en cinco idiomas (francés, inglés, español, alemán, italiano) — el idioma activo se mostrará según tu perfil de empleado.

**Si la pestaña no aparece** — vacía la caché de PrestaShop (_Parámetros Avanzados > Rendimiento > Vaciar caché_) y recarga el menú. En PrestaShop 9, cierra sesión y vuelve a iniciarla en el back office.

## Primer acceso a Adminer

### Abrir el menú

Navega a _Parámetros Avanzados > Adminer_. Llegas directamente a la lista de tablas de tu base PrestaShop, sin pantalla de autenticación, sin formulario que rellenar.

La página se compone de:

- Un banner fijo en la parte superior, en dark navy, con el nombre de tu base a la izquierda y un botón azul _Back to PrestaShop BO_ a la derecha
- La interfaz Adminer debajo: sidebar de tablas a la izquierda, contenido principal a la derecha

### Auto-login: cómo funciona

El módulo lee las credenciales de tu base desde la configuración de PrestaShop (las constantes `_DB_SERVER_`, `_DB_USER_`, `_DB_PASSWD_`, `_DB_NAME_` definidas en `config/parameters.php` o `config/settings.inc.php`) e inicia la sesión de Adminer del lado servidor con estas credenciales antes de que Adminer se cargue. No se crea ninguna contraseña nueva, no se extiende ningún permiso MySQL — Adminer usa exactamente los mismos derechos que PrestaShop.

**Sesiones Adminer por empleado** — cada empleado SuperAdmin tendrá su propia sesión Adminer (las sesiones PHP son por cookie de navegador), pero todos se conectan a la misma base con las mismas credenciales del sistema. No hay cuentas Adminer que gestionar.

## Página de configuración del módulo

Desde _Módulos > Gestor de Módulos_, busca _Database Manager Back Office_ y haz clic en _Configurar_. La página ofrece tres secciones.

### Estado

Muestra:

- Versión de Adminer instalada localmente (5.4.2 por defecto)
- Ruta del archivo `adminer.php` en el módulo
- Variante instalada (Adminer completo o Adminer Editor)
- Tamaño del archivo

### Actualizar Adminer

Cuando sale una nueva versión estable de Adminer en `adminer.org`, puedes descargarla directamente desde esta página. Haz clic en _Update to latest Adminer_ — el módulo recupera el archivo desde `adminer.org/latest-en.php` vía cURL (o file_get_contents como fallback) y reemplaza el archivo local.

**Conexión saliente requerida** — la descarga requiere que tu servidor pueda alcanzar `adminer.org` en HTTPS. En algunos hostings compartidos muy restrictivos, las conexiones salientes están bloqueadas. En ese caso, descarga manualmente el archivo desde `adminer.org` y reemplázalo en `modules/dfadminer/views/adminer/adminer.php` vía FTP.

### Cambiar a Adminer Editor

Adminer también publica una variante _Editor_ — la interfaz es idéntica pero el campo de ejecución SQL crudo está retirado. Solo la navegación en las tablas y la edición de filas siguen disponibles. Útil si quieres dar acceso a un perfil menos técnico sin arriesgar la ejecución de SQL libre.

Haz clic en _Switch to Adminer Editor_ para descargar y reemplazar el archivo. Puedes volver a Adminer completo en cualquier momento con _Switch back to full Adminer_.

## Modelo de seguridad

### Restricción SuperAdmin

Adminer es una herramienta potente: quien tiene acceso a tu base tiene acceso a todo (pedidos, clientes, pagos, contraseñas hasheadas de empleados). Por esa razón, el módulo restringe el acceso al perfil **SuperAdmin únicamente** — es decir, `id_profile = 1` en PrestaShop.

Los demás perfiles (Logístico, Traductor, Vendedor, perfiles personalizados) reciben un mensaje _Access Denied_ si intentan abrir Adminer, aunque conozcan la URL.

### Doble verificación del lado servidor

La restricción se aplica dos veces del lado servidor en el controlador:

- En `postProcess()` — antes de que Adminer se ejecute
- En `initContent()` — en el renderizado UI de respaldo

Esta doble verificación garantiza que ningún camino de código eluda la puerta, incluso con un comportamiento inesperado del router de PrestaShop.

### Bloqueo del acceso HTTP directo al archivo adminer.php

El archivo `views/adminer/adminer.php` está bloqueado al acceso HTTP directo vía un `.htaccess` con la directiva `Require all denied`. Intentar abrir directamente la URL `/modules/dfadminer/views/adminer/adminer.php` devuelve un 403 Forbidden. La única forma de alcanzar Adminer es pasando por el controlador de PrestaShop, que aplica la puerta SuperAdmin.

## Usar Adminer para PrestaShop

### Tablas comunes que conocer

Algunas tablas frecuentemente útiles para el debug PrestaShop (prefijo `ps_` por defecto, puede variar según tu instalación):

- **ps_configuration** — todas las variables de configuración (clave/valor)
- **ps_orders** — pedidos
- **ps_customer** — clientes
- **ps_product** + **ps_product_lang** — productos y sus traducciones
- **ps_employee** — empleados del BO
- **ps_log** — registro de errores de PrestaShop
- **ps_cart** + **ps_cart_product** — carritos
- **ps_specific_price** — promociones y reglas de precio

### Ejecutar una consulta SQL

En la sidebar izquierda, haz clic en _SQL command_. Escribe tu consulta, haz clic en _Execute_. Adminer muestra el resultado debajo, con paginación automática para resultados grandes.

**Consejo** — Adminer memoriza el historial de tus consultas SQL en la sesión. Puedes navegar el historial vía el menú _History_ al pie de página, y volver a ejecutar una consulta con un clic.

### Exportar una tabla

En una tabla dada, haz clic en _Export_. Adminer ofrece varios formatos: SQL (con o sin datos), CSV, TSV. Para tablas muy grandes, la exportación se hace en streaming chunked — sin problema de memoria PHP.

### Editar una fila en sitio

En cualquier tabla, haz clic en _Select data_, luego en el lápiz a la izquierda de una fila. Editas todos los campos en un formulario y guardas con un clic. Adminer genera automáticamente la consulta UPDATE.

## Múltiples empleados SuperAdmin

Si tienes varios empleados con el perfil SuperAdmin, cada uno tendrá su propia sesión Adminer independiente. Concretamente:

- El empleado A abre Adminer en su navegador — se crea su sesión adminer_sid
- El empleado B hace lo mismo en el suyo — se crea su propia sesión adminer_sid
- Ambos pueden navegar en Adminer en paralelo sin interferencia
- Cuando A cierra sesión del BO PrestaShop, su sesión Adminer sigue válida hasta que cierre el navegador (luego expira)

Todos los empleados se conectan a la misma base con las mismas credenciales del sistema — no hay cuentas Adminer separadas que gestionar.

## Actualización del módulo

Para actualizar el módulo a una versión más reciente:

1. Descarga el nuevo ZIP desde tu área de cliente DataFirefly
2. En el BO, _Módulos > Gestor de Módulos_
3. Haz clic en _Subir un módulo_ y sube el nuevo ZIP
4. PrestaShop detecta que ya existe una versión y propone actualizarla
5. Confirma — el módulo se actualiza sin perder la configuración

Al no crearse ninguna tabla BDD, no hay migración de esquema que gestionar entre versiones.

## Desinstalación

Para desinstalar limpiamente el módulo:

1. Ve a _Módulos > Gestor de Módulos_
2. Encuentra _Database Manager Back Office_
3. Haz clic en _Desinstalar_ en el menú desplegable

La desinstalación:

- Elimina la pestaña de menú _Parámetros Avanzados > Adminer_
- Retira los archivos del módulo (incluido el archivo `adminer.php` empaquetado)
- No toca ninguna tabla — tu base PrestaShop queda intacta
- No modifica ninguna configuración PrestaShop, ninguna contraseña, ningún permiso

La desinstalación es totalmente reversible: reinstala el módulo para recuperar Adminer en el mismo estado.

## Solución de problemas

### La pantalla de autenticación de Adminer aparece en lugar de la lista de tablas

Síntoma: abres el menú Adminer y ves el formulario _Autenticación_ de Adminer (campos _System_, _Server_, _Username_, _Password_, _Database_) en lugar de la lista de tablas.

Causa probable: una cookie Adminer antigua (de una instalación anterior o de otro sitio Adminer) interfiere con la sesión pre-poblada.

**Solución**:

1. Abre las DevTools de tu navegador (F12)
2. Ve a la pestaña _Application_ (Chrome) o _Almacenamiento_ (Firefox)
3. Sección _Cookies_, selecciona tu dominio
4. Elimina las cookies llamadas `adminer_sid`, `adminer_permanent`, `adminer_key` y `adminer_version`
5. Recarga la página Adminer con Ctrl+Shift+R

### Error 403 Forbidden al cargar

Síntoma: la página Adminer devuelve un estado HTTP 403, a veces con el formulario de autenticación visible debajo.

Causa probable: Adminer no reconoce la sesión pre-poblada y cae en su code-path `auth_error` que añade explícitamente `HTTP/1.1 403 Forbidden` cuando `$_GET[username]` está definido pero la autenticación falla.

**Solución**: mismo procedimiento que arriba — vacía las cookies Adminer del navegador. Si el problema persiste, verifica que las credenciales PrestaShop en `config/parameters.php` (PS9) o `config/settings.inc.php` (PS8) son correctas y que PrestaShop consigue conectarse a MySQL (¿funciona normalmente el BO PrestaShop?).

### Los enlaces de Adminer redirigen al dashboard de PrestaShop

Síntoma: haces clic en un nombre de tabla en la sidebar de Adminer y llegas al dashboard de PrestaShop en lugar de la página de la tabla.

Causa probable: el post-procesamiento de URLs (que inyecta `controller=AdminDfAdminer` en las URLs internas de Adminer) no funcionó. La mayoría de las veces: una caché HTML o un proxy intermedio que sirve una versión stale de la página.

**Solución**:

1. Vacía la caché de PrestaShop (_Parámetros Avanzados > Rendimiento > Vaciar caché_)
2. Vacía la caché del navegador (Ctrl+Shift+R)
3. Si hay un CDN o una caché HTTP aguas arriba (Cloudflare, Varnish), purga su caché para las URLs `/admin*/index.php`

### Modo oscuro: el banner o Adminer no se adaptan

El banner del módulo se adapta automáticamente al modo oscuro del sistema vía la media query `@media (prefers-color-scheme: dark)`. Adminer 5 también tiene su propio modo oscuro integrado que sigue la misma preferencia del sistema.

Si el renderizado no sigue tu modo del sistema:

- Verifica que tu SO está realmente en modo oscuro (Windows: _Configuración > Personalización > Colores > Modo oscuro_; macOS: _Preferencias del Sistema > General > Apariencia: Oscuro_)
- El navegador debe transmitir esta preferencia — por defecto Chrome y Firefox lo hacen, pero algunas extensiones de gestión de temas pueden anularla
- Verifica con DevTools _Rendering > Emulate CSS media feature prefers-color-scheme_ que la preferencia es efectivamente _dark_

### Invalid Security Token en una acción de Adminer

Síntoma: ejecutas una consulta SQL o editas una fila, y PrestaShop muestra _Invalid Security Token_.

Causa probable: este mensaje normalmente nunca aparece con el módulo — el controlador override `checkToken()` para bypassear el CSRF de PrestaShop en las acciones internas de Adminer. Si lo ves, es que estás accediendo a una URL que no pasa por nuestro controlador.

**Solución**: verifica que la URL en la barra del navegador comienza con `index.php?controller=AdminDfAdminer&token=...`. Si comienza con `index.php?select=...` sin el parámetro controller, el post-procesamiento de URLs fue eludido — vacía las cachés de PrestaShop y del navegador, y vuelve a abrir Adminer desde el menú.

## Arquitectura técnica

Para los desarrolladores o administradores curiosos que quieren entender cómo funciona el módulo internamente.

### Auto-login: pre-poblamiento de sesión

El loader `views/adminer/loader.php` inicia la sesión de Adminer antes de que `adminer.php` se cargue:

1. Cierra cualquier sesión PHP en curso vía `session_write_close()` (PS9 puede haber iniciado una vía Symfony)
2. Inicia una nueva sesión con `session_name('adminer_sid')`
3. Pre-populate `$_SESSION[pwds][server][host][user]` con la contraseña real de la base, leída desde `_DB_PASSWD_`
4. Pre-populate `$_SESSION[db][server][host][user][dbname] = true`
5. Define `$_GET[username]`, `$_GET[db]`, `$_GET[server]` con los valores de PrestaShop
6. Carga `adminer.php`

Cuando Adminer se inicializa, ve que la constante `SID` ya está definida y omite su propio `session_start()`. Ve `$_SESSION[pwds]` no vacío y omite también la restauración mediante cookie permanente. La verificación de auth pasa directamente, `Driver::connect()` usa la contraseña real vía el método `credentials()` de nuestra clase, y `login()` devuelve true.

### Bypass del CSRF de PrestaShop

Los formularios POST internos de Adminer (ejecución de consulta SQL, edición de fila, eliminación de tabla) no llevan el token CSRF por controlador de PrestaShop. Sin intervención, PS rechaza estas peticiones con una pantalla _Invalid Security Token_.

El controlador `AdminDfAdminerController` override el método `checkToken()` para devolver true sin verificación. Es seguro porque la puerta SuperAdmin (`id_profile === 1`) aguas arriba es estrictamente más fuerte que un token CSRF: un atacante que ya tenga una sesión SuperAdmin robada ya tiene acceso completo al back office de todos modos.

### Reescritura de las URLs de Adminer

Adminer construye sus enlaces internos como `index.php?select=table_name&db=ps`. Sin reescritura, estas URLs no llevan `controller=AdminDfAdminer` y PrestaShop las enrutaría al dashboard.

El controlador llama a `ob_start()` con un callback que post-procesa la salida HTML de Adminer: inyección del banner de retorno BO al inicio del body, y reescritura de todos los atributos `href`, `action` y `src` que apuntan a `index.php?...` para inyectar `controller=AdminDfAdminer&` justo después del `?`.

### Supervivencia a los exit; de Adminer

Adminer hace 19 llamadas a `exit;` en varios puntos (page_footer, file= serving para los assets, fin de error). Un simple `ob_get_clean()` al final del controlador nunca se alcanzaría en esos casos.

La solución: pasar el callback de post-procesamiento directamente a `ob_start()`. PHP llama automáticamente al callback en el momento del flush final del buffer, incluso si se llamó a `exit;`. Todas las salidas de Adminer pasan entonces por el post-procesamiento, sin excepción.

## Compatibilidad PrestaShop 9

El módulo está probado en PrestaShop 8.0, 8.1, 8.2 y 9.0. La compatibilidad PS 9 se obtiene utilizando exclusivamente los patrones legacy soportados por ambas versiones:

- `ModuleAdminController` en lugar de Symfony controllers — soportado en PS 8 y PS 9
- Smarty para la plantilla de configuración — soportado nativamente
- Instalación de pestaña vía la clase `Tab` — API estable entre versiones
- Sin clases Symfony específicas, sin bundle requerido
- PSR-4 autoload sin Composer (cargado vía `require_once` en el main module)

En PS 9, el módulo funciona sin modificación, sin recompilación, sin `composer install`.

## Licencia y código fuente

El módulo DataFirefly está bajo licencia comercial (DataFirefly Limited, Ireland). El código fuente se entrega **sin cifrar** en el ZIP — puedes auditarlo, extender los hooks, o adaptar el comportamiento (por ejemplo añadir otros perfiles autorizados a abrir Adminer).

Adminer en sí está bajo doble licencia **Apache 2.0 / GPL 2.0**, creado por Jakub Vrana. El archivo `adminer.php` empaquetado es la versión estable 5.4.2 sin cambios — puedes reemplazarlo por cualquier versión de Adminer compatible respetando la licencia original.

## Soporte

El soporte está incluido durante 12 meses después de la compra (24h laborables, FR/EN). Para cualquier pregunta:

- Email: support en datafirefly.com
- Área de cliente: [datafirefly.com/es/my-account](https://www.datafirefly.com/es/my-account/)

Para bugs o solicitudes de evolución, especifica tu versión de PrestaShop, versión PHP, hosting y versión del módulo instalada.
