errno
Aprende a usar mysqli_errno() en PHP para obtener el código de error numérico de la operación MySQLi más reciente en una conexión.
Este artículo cubre la función PHP mysqli_errno(), que devuelve el código de error numérico para la llamada más reciente en una conexión MySQLi. Aprenderás qué devuelve, cómo interpretar el código, en qué se diferencia de mysqli_error() y cómo usarla con los estilos procedimental y orientado a objetos de MySQLi.
Qué hace mysqli_errno()
mysqli_errno() es una función integrada de PHP que devuelve el código de error de la última función MySQLi ejecutada en una conexión determinada. Es la contrapartida programática de un mensaje legible por humanos: donde mysqli_error() te da una frase como "Table 'db.my_table' doesn't exist", mysqli_errno() te da el entero en bruto (en este caso, 1146) con el que puedes comparar en el código.
Sintaxis y valor de retorno
mysqli_errno(mysqli $mysqli): int- Parámetro —
$mysqli: una conexión devuelta pormysqli_connect()(procedimental) onew mysqli(...)(orientado a objetos). - Valor de retorno — el código de error de la última llamada en esa conexión, o
0si no ocurrió ningún error. Verifica siempre el valor de retorno en lugar de asumir que hay un error.
¿Por qué un número? Los códigos numéricos son estables y fáciles de evaluar con condicionales. El texto de un mensaje de error puede cambiar entre versiones de MySQL o según el idioma, pero el código (p. ej.,
1062para una clave duplicada) permanece igual — por eso los códigos son lo que debes verificar en la lógicaif/switch.
Uso de mysqli_errno() (estilo procedimental)
Requiere una conexión MySQLi válida como único argumento. A continuación se muestra un patrón típico:
¿Cómo usar la función mysqli_errno()?
<?php
$mysqli = mysqli_connect("localhost", "username", "password", "database");
if (!$mysqli) {
die("Connection failed: " . mysqli_connect_error());
}
$query = "SELECT * FROM my_table";
$result = mysqli_query($mysqli, $query);
if (!$result) {
$error_code = mysqli_errno($mysqli);
echo "Failed to execute query. Error code: " . $error_code;
exit();
}
mysqli_close($mysqli);
?>Aquí primero verificamos que la conexión fue exitosa, luego ejecutamos una consulta con mysqli_query(). Si la consulta falla (!$result), mysqli_errno($mysqli) nos proporciona el código numérico para que podamos registrarlo y salir.
Combinar errno con mysqli_error()
En la práctica, casi siempre querrás tanto el código (para evaluar con condicionales) como el mensaje (para registrar o mostrar). Usa mysqli_errno() junto con mysqli_error():
<?php
$mysqli = mysqli_connect("localhost", "username", "password", "database");
$result = mysqli_query($mysqli, "SELECT * FROM missing_table");
if (!$result) {
$code = mysqli_errno($mysqli); // e.g. 1146
$message = mysqli_error($mysqli); // e.g. "Table 'database.missing_table' doesn't exist"
// Branch on the stable numeric code, not the message text.
if ($code === 1146) {
echo "The table is missing. ";
}
echo "[$code] $message";
}
mysqli_close($mysqli);
?>Estilo orientado a objetos
Si creas la conexión con new mysqli(...), accede a $mysqli->errno como propiedad (y $mysqli->error para el mensaje) en lugar de la función procedimental:
<?php
$mysqli = new mysqli("localhost", "username", "password", "database");
if (!$mysqli->query("SELECT * FROM missing_table")) {
echo "Error " . $mysqli->errno . ": " . $mysqli->error;
}
$mysqli->close();
?>Ambos estilos reportan el mismo código — elige el que coincida con el resto de tu base de código. Consulta PHP MySQLi para obtener una descripción general de la extensión.
Códigos de error comunes de MySQL
Algunos códigos que encontrarás con frecuencia al gestionar errores de MySQLi:
| Código | Significado |
|---|---|
1045 | Acceso denegado para el usuario (nombre de usuario/contraseña incorrectos) |
1049 | Base de datos desconocida |
1062 | Entrada duplicada para una clave única/primaria |
1146 | La tabla no existe |
1264 | Valor fuera de rango para una columna |
1452 | Falla en la restricción de clave foránea |
Para la lista completa, consulta la referencia oficial de errores del servidor MySQL.
Uso avanzado
La función mysqli_errno() también puede usarse en escenarios más avanzados. Al trabajar con múltiples conexiones, debes pasar el objeto MySQLi específico a la función para recuperar el código de error de esa conexión en particular. A continuación se muestra un ejemplo:
Uso avanzado de PHP mysqli_errno()
<?php
$mysqli1 = mysqli_connect("localhost", "username", "password", "database1");
$mysqli2 = mysqli_connect("localhost", "username", "password", "database2");
if (!$mysqli1 || !$mysqli2) {
die("One or more connections failed.");
}
$query = "SELECT * FROM my_table";
$result1 = mysqli_query($mysqli1, $query);
$result2 = mysqli_query($mysqli2, $query);
if (!$result1) {
$error_code = mysqli_errno($mysqli1);
echo "Failed to execute query on connection 1. Error code: " . $error_code;
exit();
}
if (!$result2) {
$error_code = mysqli_errno($mysqli2);
echo "Failed to execute query on connection 2. Error code: " . $error_code;
exit();
}
mysqli_close($mysqli1);
mysqli_close($mysqli2);
?>En este ejemplo, creamos dos objetos MySQLi y nos conectamos a dos bases de datos MySQL diferentes. Luego ejecutamos la misma consulta usando cada conexión y almacenamos el resultado en una variable. Verificamos si hubo un error en cada consulta usando la condición !$result. Si hubo un error, llamamos a mysqli_errno() para el objeto MySQLi correspondiente para obtener el código de error asociado a esa conexión específica. Luego mostramos el código de error y salimos del script.
Nota:
mysqli_errno()reporta el error para una conexión específica. Con múltiples conexiones abiertas, el código está vinculado al objeto de conexión que pases — así que asegúrate siempre de pasar el correcto.
Funciones relacionadas
mysqli_connect_errno()— código de error para un intento de conexión fallido (cuando el enlace en sí no pudo establecerse).mysqli_connect_error()— el mensaje para un intento de conexión fallido.error_get_last()— el último error de PHP (no específico de MySQLi).
Conclusión
mysqli_errno() devuelve el código de error numérico de la operación más reciente en una conexión MySQLi, o 0 cuando no hubo error. Combínala con mysqli_error() para obtener el mensaje, evalúa el código numérico estable con condicionales y pasa el objeto de conexión correcto cuando haya varios abiertos — esa es la base de un manejo robusto de errores en MySQLi.