connect_error
Aprende a usar mysqli_connect_error() en PHP para obtener el mensaje del último error de conexión a MySQLi y cómo manejarlo correctamente.
La función mysqli_connect_error() devuelve una string que describe el último error de conexión generado por MySQLi. Es lo primero a lo que recurres cuando mysqli_connect() falla y necesitas saber por qué — host incorrecto, credenciales erróneas, base de datos inexistente o un servidor inaccesible. Esta página explica qué devuelve la función, en qué se diferencia de la función relacionada mysqli_connect_errno(), y cómo usarla correctamente tanto en la API MySQLi procedural como en la orientada a objetos.
Sintaxis
mysqli_connect_error() no acepta argumentos porque, por diseño, un intento de conexión fallido no produce un objeto MySQLi utilizable — así que no hay nada que pasarle.
mysqli_connect_error(): string|nullValor de retorno
- Una string con el mensaje de error legible por humanos de la llamada más reciente a
mysqli_connect()/mysqli_real_connect(). nullsi no ocurrió ningún error (la conexión fue exitosa).
Dado que devuelve null cuando tiene éxito, deberías llamarla solo después de haber confirmado que la conexión falló.
Cómo usar mysqli_connect_error() (estilo procedural)
En la API procedural, mysqli_connect() devuelve false cuando la conexión falla. Comprueba primero ese valor de retorno y luego lee el mensaje:
<?php
$mysqli = mysqli_connect("localhost", "username", "password", "database");
if (!$mysqli) {
// Connection failed — mysqli_connect_error() now holds the reason
echo "Failed to connect to MySQL: " . mysqli_connect_error();
exit();
}
echo "Connected successfully";
// ... run your queries here ...
mysqli_close($mysqli);
?>Si las credenciales son incorrectas, verás algo como:
Failed to connect to MySQL: Access denied for user 'username'@'localhost' (using password: YES)Estilo orientado a objetos: connect_error vs connect_errno
Cuando creas la conexión con new mysqli(...), el mysqli_connect_error() procedural sigue funcionando, pero resulta más idiomático leer las propiedades correspondientes del objeto:
$mysqli->connect_error— el mensaje de error (string, onullsi tuvo éxito).$mysqli->connect_errno— el número del error (un código entero,0si tuvo éxito).
El número es útil para ramificar según un fallo específico; el mensaje es para humanos y registros de log.
<?php
$mysqli = new mysqli("localhost", "username", "password", "database");
if ($mysqli->connect_errno) {
echo "Failed to connect to MySQL: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error;
exit();
}
echo "Connected successfully";
$mysqli->close();
?>Para un desglose completo del código numérico, consulta mysqli_connect_errno().
Recomendado: hacer que MySQLi lance excepciones
Verificar manualmente el valor de retorno después de cada conexión es fácil de olvidar. Desde PHP 8.1, MySQLi lanza una mysqli_sql_exception en caso de fallo por defecto, lo que te permite gestionar los errores con un bloque try/catch normal. Este es el patrón recomendado para código nuevo:
<?php
// Enable exception mode explicitly (the default since PHP 8.1)
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
try {
$mysqli = new mysqli("localhost", "username", "password", "database");
echo "Connected successfully";
$mysqli->close();
} catch (mysqli_sql_exception $e) {
// $e->getMessage() carries the same text connect_error would return
echo "Failed to connect to MySQL: " . $e->getMessage();
exit();
}
?>Con el modo de excepciones activado, connect_error rara vez se lee directamente — el mensaje viaja dentro de la excepción en su lugar.
Errores comunes
- No lo llames sobre el objeto de conexión que no pudiste obtener. En una conexión procedural fallida,
$mysqliesfalse, por lo que$mysqli->connect_errordaría un error. Usa elmysqli_connect_error()independiente (sin argumento) en ese caso. - Refleja el último intento. Si abres varias conexiones, el valor pertenece a la llamada de conexión más reciente, no a un manejador específico.
- Nunca muestres errores sin procesar a los usuarios finales en producción. Los mensajes de conexión pueden filtrar nombres de host y nombres de usuario — regístralos y muestra un mensaje genérico en su lugar.
Conclusión
mysqli_connect_error() es una herramienta de depuración pequeña pero esencial: te dice exactamente por qué falló una conexión MySQLi. Combínala con mysqli_connect_errno() cuando necesites el código numérico, prefiere las propiedades OO connect_error/connect_errno cuando te conectas con new mysqli(), y para proyectos nuevos opta por el manejo de errores basado en excepciones. Para aprender más sobre cómo abrir conexiones, consulta mysqli_connect() y la descripción general de MySQLi.