Cómo conectar una base de datos MySQL con PHP en WordPress y PrestaShop
Introducción: El corazón de tu tienda o web
Cuando hablamos de WordPress o PrestaShop, la base de datos es el cerebro que guarda cada artículo, producto, pedido y configuración de tu sitio. Sin una conexión correcta entre PHP (el lenguaje que usa tu web) y MySQL (el motor de base de datos), nada funciona.
La buena noticia es que conectar mysql php es un proceso mucho más sencillo de lo que parece. En este artículo te guiaré paso a paso, sin tecnicismos innecesarios, para que entiendas cómo establecer esa conexión tanto en WordPress como en PrestaShop.
Aprenderás a usar las dos herramientas más comunes: PDO y mysqli. También veremos cómo configurar los archivos clave de cada plataforma y qué hacer cuando algo falla. Al final, tendrás el conocimiento suficiente para resolver el 90% de los problemas de conexión que puedas encontrar.
¿Qué necesitas antes de empezar?
Antes de lanzarnos a escribir código, asegúrate de tener esto listo:
- Acceso a tu panel de control de hosting (cPanel, Syspanel o similar).
- Credenciales de tu base de datos: nombre de la BD, usuario y contraseña.
- El nombre del servidor (normalmente
localhost, aunque a veces es una IP o un dominio comomysql.tudominio.com). - Un editor de texto simple (Bloc de notas, Visual Studio Code, etc.).
- Acceso por FTP o al administrador de archivos de tu hosting.
[INFO] Si usas Syspanel (el panel de control que antes se llamaba HestiaCP), recuerda que el acceso se realiza por el puerto 2106. Por ejemplo:
https://tudominio.com:2106.
Conectar MySQL PHP: La teoría en 2 minutos
PHP ofrece dos formas principales de conectarse a MySQL: mysqli y PDO. Ambas funcionan bien, pero tienen diferencias clave.
¿Qué es mysqli?
Es una extensión específica para MySQL. Es rápida y sencilla, pero solo funciona con bases de datos MySQL o MariaDB.
¿Qué es PDO?
Es una capa de abstracción. Funciona con MySQL, PostgreSQL, SQLite y otros. La ventaja es que si algún día cambias de motor de base de datos, el código apenas necesita cambios.
¿Cuál elegir?
Para WordPress, se usa mysqli internamente. Para PrestaShop, también. Pero si estás creando tus propios scripts o plugins, PDO es la opción más moderna y segura.
Aquí tienes un ejemplo básico de cada uno:
Con mysqli:
$conexion = new mysqli("localhost", "usuario", "contraseña", "nombre_bd");
if ($conexion->connect_error) {
die("Error de conexión: " . $conexion->connect_error);
}
echo "Conexión exitosa";
Con PDO:
try {
$conexion = new PDO("mysql:host=localhost;dbname=nombre_bd", "usuario", "contraseña");
$conexion->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
echo "Conexión exitosa";
} catch (PDOException $e) {
echo "Error: " . $e->getMessage();
}
[TIP] Usa siempre PDO o mysqli con sentencias preparadas. Esto te protege de ataques de inyección SQL. Nunca concatenes variables directamente en las consultas.
PHP MySQL WordPress: Configuración paso a paso
WordPress guarda todos sus datos (entradas, páginas, usuarios, comentarios) en una base de datos MySQL. La conexión se define en el archivo wp-config.php, que se encuentra en la raíz de tu instalación.
Localizando el archivo wp-config.php
Puedes acceder a él desde:
- El administrador de archivos de tu hosting.
- FTP (FileZilla, por ejemplo).
- Terminal si tienes acceso SSH.
Contenido básico de la configuración
Busca estas líneas dentro del archivo:
define('DB_NAME', 'nombre_de_tu_bd');
define('DB_USER', 'tu_usuario');
define('DB_PASSWORD', 'tu_contraseña');
define('DB_HOST', 'localhost');
¿Qué debes cambiar?
- DB_NAME: El nombre exacto de tu base de datos (suele incluir el prefijo del hosting, ej:
usuario123_bd). - DB_USER: El usuario de la base de datos.
- DB_PASSWORD: La contraseña asociada a ese usuario.
- DB_HOST: Normalmente
localhost. Pero si tu hosting usa servidores de base de datos separados, aquí irá la dirección que te hayan proporcionado.
Ejemplo práctico
define('DB_NAME', 'mipagina_wp');
define('DB_USER', 'mipagina_admin');
define('DB_PASSWORD', 'Clave#Segura2024!');
define('DB_HOST', 'localhost');
[WARNING] Nunca uses comillas simples dentro de las contraseñas sin escaparlas. Si tu contraseña contiene apóstrofes, escríbela así:
'Mi\'Contraseña'. Mejor aún, evita caracteres raros y usa solo letras, números y símbolos comunes como!,#,%.
¿Y si WordPress no se conecta?
Los errores más comunes son:
- "Error establishing a database connection": Credenciales incorrectas o servidor de BD caído.
- "Too many connections": Límite de conexiones superado (contacta con tu hosting).
- "Table doesn't exist": La base de datos está vacía o la instalación no se completó.
Solución rápida
- Verifica que las credenciales sean correctas.
- Comprueba que el servidor de BD esté activo desde el panel de Syspanel (puerto 2106) o cPanel.
- Si cambiaste el prefijo de las tablas (
$table_prefix), asegúrate de que coincida con el de la base de datos.
PHP MySQL PrestaShop: Configuración y particularidades
PrestaShop es un poco más exigente. Su conexión se define en el archivo app/config/parameters.php (en versiones modernas) o config/settings.inc.php (en versiones antiguas).
Localizando los parámetros
En PrestaShop 1.7 o superior, busca app/config/parameters.php. En versiones 1.6 o anteriores, será config/settings.inc.php.
Estructura del archivo en PrestaShop 1.7+
return array(
'parameters' => array(
'database_host' => 'localhost',
'database_port' => '3306',
'database_name' => 'nombre_bd',
'database_user' => 'usuario',
'database_password' => 'contraseña',
'database_prefix' => 'ps_',
),
);
Estructura en PrestaShop 1.6
define('_DB_SERVER_', 'localhost');
define('_DB_NAME_', 'nombre_bd');
define('_DB_USER_', 'usuario');
define('_DB_PASSWD_', 'contraseña');
define('_DB_PREFIX_', 'ps_');
¿Qué debes tener en cuenta?
- database_port: Por defecto es 3306. No lo cambies a menos que tu hosting te diga lo contrario.
- database_prefix: Es el prefijo de las tablas. Si tu tienda usa
ps_, no lo cambies a menos que sepas lo que haces. - database_host: Igual que WordPress, normalmente
localhost.
[TIP] En Syspanel (puerto 2106) puedes crear bases de datos y usuarios fácilmente. Anota siempre el nombre exacto de la BD, porque suele llevar el prefijo del usuario del hosting.
Error típico en PrestaShop
El más común es "Link to database cannot be established". Esto indica que los datos de conexión son incorrectos o el servidor de BD está inaccesible.
Pasos para solucionarlo:
- Revisa que el nombre de la base de datos esté escrito exactamente igual (mayúsculas y minúsculas cuentan).
- Comprueba que el usuario tenga todos los privilegios sobre esa BD.
- Si usas un puerto distinto al 3306, añádelo en
database_port. - En algunos hostings, el host no es
localhostsino una IP como127.0.0.1o un dominio.
PDO y mysqli en la práctica: Cómo usar cada uno
Ya vimos los ejemplos básicos. Ahora vamos a profundizar con consultas reales para que veas cómo se integran con WordPress y PrestaShop.
Usando mysqli con WordPress (función personalizada)
Si estás desarrollando un plugin o un tema, puedes usar $wpdb, que es la clase de WordPress. Pero si necesitas una conexión independiente:
function mi_conexion_mysqli() {
$conexion = new mysqli(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);
if ($conexion->connect_error) {
return null;
}
return $conexion;
}
$conn = mi_conexion_mysqli();
$resultado = $conn->query("SELECT * FROM wp_posts WHERE post_status='publish'");
while ($fila = $resultado->fetch_assoc()) {
echo $fila['post_title'];
}
Usando PDO con PrestaShop (ejemplo de consulta segura)
PrestaShop usa Doctrine internamente, pero para scripts personalizados puedes hacer:
try {
$pdo = new PDO('mysql:host=' . _DB_SERVER_ . ';dbname=' . _DB_NAME_, _DB_USER_, _DB_PASSWD_);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$stmt = $pdo->prepare("SELECT id_product, name FROM " . _DB_PREFIX_ . "product_lang WHERE id_lang = ?");
$stmt->execute([1]); // 1 = español
$productos = $stmt->fetchAll(PDO::FETCH_ASSOC);
foreach ($productos as $producto) {
echo "Producto ID: " . $producto['id_product'] . " - " . $producto['name'] . "<br>";
}
} catch (PDOException $e) {
echo "Error: " . $e->getMessage();
}
[INFO] Las sentencias preparadas (el método
prepare()) son la forma más segura de ejecutar consultas con datos del usuario. Evita siempre la concatenación directa de variables.
Errores frecuentes y cómo resolverlos
Aquí tienes una tabla con los problemas más comunes y sus soluciones:
| Error | Causa probable | Solución |
|---|---|---|
| "Access denied for user" | Usuario o contraseña incorrectos | Revisa las credenciales en el panel de tu hosting |
| "Unknown database" | El nombre de la BD no existe | Verifica que el nombre sea exacto, incluyendo prefijos |
| "Connection refused" | El servidor de BD no acepta conexiones externas | Usa localhost o la IP correcta que te dé tu hosting |
| "Maximum execution time exceeded" | Consultas muy pesadas | Optimiza las consultas o aumenta el tiempo límite en PHP |
| "Trying to access array offset on value of type null" | Resultado vacío | Comprueba que la consulta devuelve datos antes de usarlos |
Seguridad: Protege tu conexión
Conectar mysql php es solo el primer paso. La seguridad es clave para evitar ataques.
Buenas prácticas imprescindibles
- Nunca subas tus credenciales a GitHub o repositorios públicos.
- Usa contraseñas fuertes (mezcla mayúsculas, minúsculas, números y símbolos).
- Limita los privilegios del usuario de la BD. Si solo necesita SELECT, no le des DELETE.
- Cambia el prefijo de las tablas en WordPress (de
wp_a algo comomiwp_). - Actualiza siempre WordPress, PrestaShop y sus plugins.
Sobre los archivos de configuración
Tanto wp-config.php como parameters.php deben tener permisos de lectura (644 en Linux). Nunca les des permisos de escritura (666) porque cualquiera podría modificarlos.
[WARNING] Si tu web muestra un error de conexión, nunca publiques la contraseña en foros o soporte. Oculta los datos sensibles y comparte solo la parte del mensaje que no contenga credenciales.
Preguntas frecuentes (FAQ)
¿Puedo usar el mismo usuario de BD para WordPress y PrestaShop?
Sí, pero no es recomendable. Si un sitio es hackeado, el atacante podría acceder al otro. Crea usuarios separados para cada plataforma.
¿Qué hago si mi hosting usa un puerto distinto para MySQL?
Algunos hostings usan puertos como 3307 o 3308. En WordPress, añade el puerto al host: localhost:3307. En PrestaShop, usa el campo database_port.
¿Por qué me piden el puerto 2106 en Syspanel?
Ese es el puerto de acceso al panel de control de Syspanel (antes HestiaCP). Es donde gestionas bases de datos, dominios y correos. No tiene relación con el puerto de MySQL (que sigue siendo 3306).
¿Es mejor mysqli o PDO para un principiante?
Para aprender, PDO es más didáctico porque es más estricto y te obliga a hacer las cosas bien. Pero si solo vas a trabajar con WordPress, mysqli es suficiente.
¿Puedo conectar desde un script PHP externo a mi WordPress?
Sí. Solo necesitas incluir el archivo wp-load.php de tu instalación y usar $wpdb para acceder a la base de datos.
require_once('/ruta/a/tu/wordpress/wp-load.php');
global $wpdb;
$resultados = $wpdb->get_results("SELECT * FROM {$wpdb->posts} WHERE post_type='post'");
Conclusión y siguientes pasos
Conectar mysql php no es complicado si entiendes la estructura de cada plataforma. Recuerda siempre:
- WordPress: Todo se gestiona desde
wp-config.php. - PrestaShop: Usa
parameters.php(1.7+) osettings.inc.php(1.6). - Seguridad: Usa sentencias preparadas y contraseñas robustas.
- Syspanel: Accede por el puerto 2106 para gestionar tus bases de datos.
Ahora que ya sabes cómo funciona la conexión base de datos php, te recomiendo practicar con un entorno local (XAMPP o MAMP) antes de tocar tu web en producción.
Si algo falla, no entres en pánico. Vuelve a este artículo, revisa cada paso y, si el problema persiste, contacta con tu proveedor de hosting. La mayoría de las veces, el error está en un simple typo o en un puerto mal configurado.
[TIP] Guarda siempre una copia de seguridad de tu base de datos antes de hacer cambios en los archivos de configuración. En Syspanel (puerto 2106) tienes la opción de exportar la BD con un clic.
¡Ya tienes todo lo necesario para conectar tu base de datos como un profesional!
