🎨 Sysprovider Code
Sysprovider LogoWiki
🇪🇸Hosting español para ecommerce

Errores comunes al conectar PHP con MySQL y cómo solucionarlos (cPanel/Plesk)

Actualizado el 3 de junio de 2026

Conectar PHP con MySQL es una de las tareas más comunes al montar una web, pero también es una de las que más quebraderos de cabeza genera. Si estás leyendo esto, probablemente te hayas topado con mensajes como mysqli::connect(): Access denied for user o Connection refused. No te preocupes, es más habitual de lo que parece y, en el 90% de los casos, la solución es mucho más sencilla de lo que crees.

Aquí no vamos a hablar de código avanzado, sino de esos fallos típicos de configuración que ocurren cuando trabajas con paneles como cPanel o Plesk. Vamos a desgranar, paso a paso, los errores más frecuentes y cómo darles solución incluso si no eres un experto en servidores.

1. El error de acceso denegado: Access denied for user

Este es, sin lugar a dudas, el error más buscado junto con "error conexión php mysql". El mensaje suele ser similar a este:

Warning: mysqli_connect(): (HY000/1045): Access denied for user 'usuario'@'localhost' (using password: YES)

La traducción es simple: MySQL te dice que el usuario y la contraseña que has puesto en tu archivo PHP no coinciden con los que hay en la base de datos, o que ese usuario no tiene permisos para conectarse desde esa máquina.

¿Por qué ocurre esto?

  • Contraseña mal copiada: Es el clásico. Copias y pegas desde un correo o un bloc de notas y se cuela un espacio al principio o al final.
  • Usuario incorrecto: No es lo mismo el usuario del panel de control (cPanel) que el usuario de la base de datos. Suelen ser diferentes.
  • Permisos insuficientes: El usuario existe, pero no tiene privilegios sobre la base de datos concreta que intentas usar.

Cómo solucionarlo en cPanel

  1. Ve a Bases de datos MySQL.
  2. Localiza tu base de datos y, justo debajo, verás la lista de usuarios asignados a esa base.
  3. Asegúrate de que el nombre de usuario en tu código PHP coincide exactamente con el que aparece en la lista. A menudo, cPanel añade un prefijo con tu nombre de cuenta (ej: tuusuario_bdadmin). Si en tu código pones solo bdadmin, fallará.
  4. Si no estás seguro de la contraseña, la forma más segura de solucionarlo es cambiarla. En la sección Cambiar contraseña de MySQL, crea una nueva.
  5. Actualiza tu archivo config.php o conexion.php con la nueva contraseña. Importante: Si usas WordPress, tendrás que editar el archivo wp-config.php.

Cómo solucionarlo en Plesk

  1. Entra en Bases de datos.
  2. Haz clic en el nombre de tu base de datos.
  3. Verás una pestaña que dice Usuarios. Ahí puedes añadir un nuevo usuario o cambiar la contraseña de uno existente.
  4. Al igual que en cPanel, asegúrate de que el usuario tiene marcada la casilla de permisos. Si no sabes cuál marcar, selecciona Todos o Privilegios completos.

[TIP] Cuando cambies la contraseña de la base de datos, hazlo siempre desde el panel (cPanel/Plesk) y no desde phpMyAdmin. A veces, cambiar la contraseña directamente en MySQL no actualiza los metadatos de los hosts correctamente.

2. El error de conexión rechazada: Connection refused

Este error es diferente. El mensaje típico es:

Warning: mysqli::__construct(): (HY000/2002): Connection refused

Aquí el problema no es quién eres, sino dónde intentas conectarte. PHP no está encontrando el servidor de MySQL. Es un clásico "error conexión php mysql" que confunde mucho porque el código parece perfecto.

Las causas más comunes

  • Host incorrecto: Has puesto localhost y el servidor de bases de datos está en otro puerto o en otra dirección.
  • Puerto bloqueado: MySQL no usa el puerto por defecto (3306) o el firewall lo está bloqueando.
  • El servicio no está activo: A veces, el servicio MySQL se detiene (especialmente en servidores con poca RAM).

Solución paso a paso

  1. Comprueba el host. En cPanel y Plesk, casi siempre es localhost. Pero si tu web está en un servidor externo y la base de datos en otro, tendrás que poner la IP del servidor de bases de datos.
  2. Añade el puerto. Si tu proveedor usa un puerto alternativo, la conexión debería ser así: $host = "localhost:3307"; (o el puerto que te hayan dado).
  3. Revisa el firewall. Esto es más de servidor, pero si tienes acceso a WHM o a la consola de Plesk, asegúrate de que el puerto 3306 está abierto para conexiones locales. Para conexiones remotas, es más complejo y requiere configurar los hosts remotos en MySQL.

[WARNING] Si tu web está en el mismo servidor que la base de datos, no intentes usar la IP pública del servidor como host. Usa localhost o 127.0.0.1. Usar la IP pública puede ralentizar la conexión y dar problemas de firewall innecesarios.

3. El error de host desconocido: Unknown MySQL server host

Este es menos común, pero aparece cuando escribes mal el nombre del servidor.

Warning: mysqli::__construct(): (HY000/2005): Unknown MySQL server host 'localhostt'

La solución

Revisa tu archivo de conexión. Es un simple error de escritura. Asegúrate de que no hay espacios ni caracteres extraños. Parece una tontería, pero es uno de los fallos más frecuentes después de copiar y pegar código de internet.

4. Problemas con el puerto: Port is not a number o Connection refused en puerto específico

A veces, en Plesk, el servidor MySQL está configurado para escuchar en un socket Unix en lugar de un puerto TCP/IP. Esto provoca que, al especificar localhost, PHP intente usar el socket y falle si la ruta no es correcta.

La solución práctica

En lugar de usar localhost, intenta usar 127.0.0.1. Esto fuerza a PHP a usar TCP/IP en lugar del socket.

// En lugar de esto
$mysqli = new mysqli("localhost", "usuario", "clave", "basededatos");

// Prueba con esto
$mysqli = new mysqli("127.0.0.1", "usuario", "clave", "basededatos");

Si eso funciona, el problema es el socket. Puedes intentar añadir el puerto explícitamente: $mysqli = new mysqli("127.0.0.1:3306", ...);

[INFO] En la mayoría de los casos, localhost y 127.0.0.1 son intercambiables, pero en servidores con configuraciones avanzadas, 127.0.0.1 es más fiable para conexiones PHP.

5. El error de autenticación por caché: mysql_native_password vs caching_sha2_password

Este es un error moderno. Si tu servidor usa MySQL 8 o MariaDB 10.2+ y tu versión de PHP es antigua (PHP 5.6 o inferior), puede que no entienda el nuevo método de autenticación.

El mensaje suele ser: The server requested authentication method unknown to the client.

Cómo solucionarlo

La solución más segura es actualizar PHP a la versión 7.4 o superior. Pero si no puedes, tendrás que cambiar el método de autenticación del usuario en MySQL.

Para ello, entra en phpMyAdmin, selecciona tu base de datos, ve a la pestaña Usuarios, edita el usuario y cambia el plugin a mysql_native_password.

[WARNING] Cambiar el plugin de autenticación puede tener implicaciones de seguridad. Si tu proveedor te lo permite, es mejor actualizar PHP. Esta es una solución temporal.

6. Errores con el prefijo de la base de datos en cPanel

Este es un error muy específico de cPanel y que confunde a muchos novatos.

Imagina que tu usuario se llama miuser y tu base de datos mibd. En cPanel, el nombre real de la base de datos es miuser_mibd y el usuario real es miuser_miuser.

Si en tu código pones:

$db = "mibd";
$user = "miuser";

Fracasarás. Debes poner:

$db = "miuser_mibd";
$user = "miuser_miuser";

La solución

Ve a Bases de datos MySQL en cPanel y mira los nombres exactos. Copia y pega desde ahí. Nunca los escribas a mano.

7. El error de permisos de archivo o mysqli::real_connect(): (HY000/1044): Access denied for user to database

Este error dice que el usuario tiene permisos para conectarse, pero no para operar sobre la base de datos específica. Es decir, el usuario existe, la contraseña es correcta, pero no está asignado a la base de datos.

La solución en cPanel

  1. Ve a Bases de datos MySQL.
  2. En la sección Añadir usuario a la base de datos, selecciona tu usuario y tu base de datos.
  3. Haz clic en Añadir.
  4. Marca la casilla TODOS LOS PRIVILEGIOS o selecciona los que necesites.

La solución en Plesk

  1. Ve a Bases de datos y selecciona la tuya.
  2. Ve a la pestaña Usuarios.
  3. Asegúrate de que el usuario está en la lista y tiene marcada la casilla de permisos.

8. Errores con HestiaCP o Syspanel

Si estás usando un panel alternativo como HestiaCP (que nosotros llamamos Syspanel), el proceso es un poco diferente. Recuerda que el puerto de acceso a este panel es el 2106.

Diferencias clave

  • En Syspanel, los nombres de usuario y base de datos no suelen tener prefijos tan largos como en cPanel, pero a veces añaden un guion bajo.
  • El acceso a phpMyAdmin se hace desde el propio panel, y a veces la URL es específica.

Solución en Syspanel

  1. Accede a tu panel en http://tu-servidor:2106.
  2. Ve a la sección Bases de datos.
  3. Allí verás el nombre exacto de la base de datos y del usuario.
  4. Al crear la base de datos, asegúrate de marcar la casilla de Crear usuario y ponle una contraseña segura.

[TIP] En Syspanel, si tienes problemas de conexión, revisa que el servicio MySQL esté activo. Puedes hacerlo desde la sección Servicios del panel.

9. El error de Too many connections

Este error es menos común, pero si tienes una web con mucho tráfico o un plugin mal configurado, puede aparecer:

Warning: mysqli::__construct(): (HY000/1040): Too many connections

Cómo solucionarlo

Este no es un error de código, sino de recursos del servidor. Necesitas aumentar el límite de conexiones en MySQL.

  1. Entra en MySQL o Configuración de MySQL desde tu panel.
  2. Busca la variable max_connections.
  3. Auméntala, por ejemplo, de 100 a 200.

Si no tienes acceso a esta configuración, contacta con tu proveedor. Pero primero, revisa tu código: ¿estás cerrando las conexiones con $mysqli->close()? A veces, un bucle infinito o una consulta que tarda mucho puede saturar las conexiones.

10. Errores de codificación de caracteres

Este es un error que no corta la conexión, pero causa problemas extraños: caracteres raros (ñ, é) en lugar de ñ, é, etc.

La solución

Asegúrate de que tu conexión usa UTF-8.

$mysqli->set_charset("utf8mb4");

Y en tu base de datos, asegúrate de que las tablas y columnas usan utf8mb4_unicode_ci como collation.

Resumen rápido de soluciones para errores comunes

Para que te lleves una chuleta rápida:

ErrorCausa probableSolución
Access deniedUsuario/contraseña malCambiar contraseña en el panel
Connection refusedHost o puerto malUsar localhost o 127.0.0.1
Unknown hostError de escrituraRevisar el nombre del servidor
Access denied to databaseUsuario no asignado a la BDAñadir usuario a la base de datos
Too many connectionsLímite del servidorAumentar max_connections

[INFO] Antes de cambiar nada en tu código, haz una copia de seguridad de tu archivo de conexión. Es un archivo pequeño, pero es el corazón de tu aplicación.

Preguntas frecuentes (FAQ)

¿Por qué me da error de conexión si estoy seguro de que la contraseña es correcta?

Revisa que no hay espacios en blanco al copiar. También prueba a cambiar la contraseña desde el panel y vuelve a intentarlo. A veces, el panel guarda un hash antiguo.

¿Es lo mismo localhost que 127.0.0.1?

En la mayoría de los casos, sí. Pero si tienes problemas de conexión con localhost, prueba con 127.0.0.1. Es un truco muy útil.

¿Qué hago si mi proveedor usa Plesk y no encuentro la sección de bases de datos?

En Plesk, busca en el menú lateral la pestaña Bases de datos o Sitios web y dominios y luego la subpestaña Bases de datos. Si no la ves, puede que tu plan no incluya acceso directo a la gestión de bases de datos.

¿Puedo usar la misma conexión para varias bases de datos?

Sí, pero tendrás que crear un usuario con permisos sobre ambas bases de datos. En cPanel, puedes añadir el mismo usuario a varias bases de datos.

Esperamos que esta guía te haya ayudado a resolver el molesto "error conexión php mysql". La próxima vez que veas un Access denied o un Connection refused, respira hondo, revisa los puntos de esta lista y verás que en cinco minutos lo tienes solucionado.

¿Necesitas ayuda?Son dos de nuestros técnicos, Agustín y Mikel, y están disponibles para resolver cualquier problema.

Hablar con ellos ahora
Agustín y Mikel