error_list
Aprende a usar mysqli_error_list() en PHP para obtener un array de errores de la última llamada a MySQLi, con número de error, SQLSTATE y mensaje.
La función mysqli_error_list() devuelve un array de los errores generados por la llamada más reciente a una función MySQLi en una conexión dada. A diferencia de mysqli_error(), que solo devuelve el último mensaje de error como string, mysqli_error_list() devuelve todos los errores de esa operación — cada uno como un array asociativo que contiene el número de error, el código SQLSTATE y el mensaje legible. Esta página explica la sintaxis, la estructura de los datos devueltos y cómo utilizarla en la práctica.
Sintaxis
mysqli_error_list(mysqli $mysql): arrayEl estilo orientado a objetos utiliza la propiedad de solo lectura error_list en su lugar:
$mysqli->error_list;Parámetros
$mysql— Un objeto de conexión MySQLi devuelto pormysqli_connect()(omysqli_init()/new mysqli()).
Valor de retorno
Un array de arrays asociativos. El array está vacío cuando no se produjo ningún error. Cada entrada tiene tres claves:
| Clave | Tipo | Descripción |
|---|---|---|
errno | int | El número de error de MySQL (p. ej., 1146 para "la tabla no existe"). |
sqlstate | string | El código de error SQLSTATE de cinco caracteres (p. ej., 42S02). |
error | string | El texto del mensaje de error. |
Ejemplo básico
Se llama a mysqli_error_list() inmediatamente después de la operación que se desea inspeccionar — normalmente cuando una consulta acaba de fallar:
<?php
$mysqli = mysqli_connect("localhost", "username", "password", "database");
$query = "SELECT * FROM my_table";
$result = mysqli_query($mysqli, $query);
if (!$result) {
$error_list = mysqli_error_list($mysqli);
foreach ($error_list as $error) {
echo "Failed to execute query. Error message: " . $error['error'] . "\n";
}
exit();
}
mysqli_close($mysqli);
?>Aquí nos conectamos, ejecutamos una consulta y comprobamos el resultado. Si mysqli_query() devuelve false, llamamos a mysqli_error_list() y recorremos el array devuelto, imprimiendo el mensaje error de cada error antes de salir. Cuando la consulta tiene éxito, el bucle simplemente no se ejecuta porque el array está vacío.
Lectura del código de error y el SQLSTATE
Como cada entrada es un array asociativo, puedes leer el código numérico y el SQLSTATE junto con el mensaje — útil para ramificar según fallos específicos en lugar de analizar el texto del mensaje:
<?php
$mysqli = mysqli_connect("localhost", "username", "password", "database");
$query = "SELECT * FROM my_table";
$result = mysqli_query($mysqli, $query);
if (!$result) {
$error_list = mysqli_error_list($mysqli);
foreach ($error_list as $error) {
echo "Failed to execute query. Error message: " . $error['error'] . "\n";
echo "Error code: " . $error['errno'] . "\n";
echo "SQLSTATE error code: " . $error['sqlstate'] . "\n";
}
exit();
}
mysqli_close($mysqli);
?>Esto extiende el ejemplo básico imprimiendo el errno numérico y el código sqlstate para cada error, proporcionando el contexto de diagnóstico completo.
Estilo orientado a objetos
Si creas la conexión con new mysqli(), utiliza la propiedad error_list:
<?php
$mysqli = new mysqli("localhost", "username", "password", "database");
if (!$mysqli->query("SELECT * FROM missing_table")) {
foreach ($mysqli->error_list as $error) {
echo "[{$error['errno']}] {$error['sqlstate']}: {$error['error']}\n";
}
}
$mysqli->close();
?>mysqli_error_list() vs. funciones relacionadas
mysqli_error()— devuelve solo el último mensaje de error como string. Úsala cuando solo necesitas un único mensaje.mysqli_errno()— devuelve el número de error de la última llamada.mysqli_error_list()— devuelve todos los errores de la última llamada, cada uno conerrno,sqlstateyerror. Úsala cuando una sola operación puede generar múltiples problemas.
Consideraciones importantes
- La lista refleja solo la llamada MySQLi más reciente en esa conexión. Captúrala inmediatamente después de la operación fallida — una llamada exitosa posterior la borrará.
- Una operación exitosa devuelve un array vacío, no
falseninull, así que protege conif (!$result)(o compruebamysqli_errno()) antes de asumir que hay errores que leer. - Para fallos de conexión, el propio paso de conexión falla antes de que tengas un objeto utilizable — usa
mysqli_connect_error()en ese caso.
Conclusión
mysqli_error_list() te ofrece acceso estructurado a todos los errores de la última operación MySQLi, con número de error, SQLSTATE y mensaje. Recurre a ella cuando necesites diagnósticos más completos de los que proporciona mysqli_error(). Para el manejo de errores en PHP de forma más amplia, consulta manejo de errores en PHP y la visión general de mysqli.