Mostrar errores usando las funciones de error de MySQLi
MySQLi
es una función de PHP utilizada para acceder al servidor de base de datos MySQL. Puede usar esta extensión si tiene MySQL versión 4.1.13 o superior.
Hay varias funciones MySQLi
que puede usar para realizar diferentes funciones en PHP. En este artículo, aprenderemos las funciones de error de MySQLi
.
También veremos cómo y dónde usar ejemplos de código y observar los resultados. Para este tutorial, usaremos MySQL versión 8.0.27 y PHP versión 7.4.1.
Funciones de error PHP MySQLi
En este tutorial, aprenderemos sobre las siguientes funciones de error PHP MySQLi
:
mysqli_error()
mysqli_errno()
mysqli_error_list()
mysqli_connect_error()
mysqli_connect_errno()
Todas estas funciones se pueden utilizar en estilo orientado a objetos y estilo procedimental. Entendamos ambas sintaxis usando la función mysqli_error()
.
Sintaxis de la función mysqli_error()
en estilo orientado a objetos
string $mysqli->error;
Sintaxis de la función mysqli_error()
en estilo procedimental
string mysqli_error ( mysqli $link )
Función mysqli_error()
en MySQL
Esta función se utiliza para generar la última descripción de error de la llamada de función más reciente (si la hay). Se utiliza cuando se quiere saber si la consulta SQL
tiene error o no.
mysqli_error()
devuelve la descripción del error y una cadena vacía si no hay ningún error. Vea el siguiente ejemplo.
Código de ejemplo usando estilo procedimental:
<?php
$host = "localhost";
$username = "root";
$password = "";
$database = "person";
$connection = mysqli_connect($host, $username, $password, $database)
or die("Connection Failed");
$sql = "SELECT * FROM teacher";
$result = mysqli_query($connection, $sql);
$error_message = mysqli_error($connection);
if($error_message == ""){
echo "No error related to SQL query.";
}else{
echo "Query Failed: ".$error_message;
}
mysqli_close($connection);
?>
El código dado arriba intenta hacer la conexión usando las variables $host
, $username
, $password
, $database
y guarda esta conexión en la variable $connection
.
La función mysqli_error()
tomará esta variable de conexión $conexión
como un parámetro y verificará si hay algún error causado por la reciente llamada a la función MySQLi
que es mysqli_query($connection, $sql)
aquí.
Producción:
Ahora, cambie el nombre de la tabla en la consulta SQL
de teacher
a person
y observe el resultado que se muestra a continuación.
Producción:
Nosotros, como desarrolladores, podemos entender fácilmente que no hay una tabla de person
en la base de datos person
(esto es lo que significa en el error anterior).
Mantenga el nombre de la tabla cambiado y reemplace la línea $error_message = mysqli_error($connection);
con $error_message = $connection->error;
para practicar y comprender el estilo orientado a objetos utilizando la función de error MySQLi
.
Función mysqli_errno()
en MySQL
mysqli_errno()
funciona igual que mysqli_error()
, pero devolverá el código de error en lugar de la descripción del error.
Escribe el siguiente código para practicar y entender. Es posible que haya notado que usamos un estilo procedimental para practicar esta función.
<?php
$host = "localhost";
$username = "root";
$password = "";
$database = "person";
$connection = mysqli_connect($host, $username, $password, $database)
or die("Connection Failed");
$sql = "SELECT * FROM person";
$result = mysqli_query($connection, $sql);
$error_message = mysqli_errno($connection);
if($error_message == ""){
echo "No error related to SQL query.";
}else{
echo "Query Failed: ".$error_message;
}
mysqli_close($connection);
?>
El código dado arriba mostrará el siguiente resultado donde verá un número como código de error.
Producción:
La pregunta es, ¿por qué usamos esta función para mostrar solo los números? Porque si desea imprimir un mensaje de error fácil de usar (mensaje personalizado), puede usar este código de error en declaraciones if-else
.
Vea el siguiente código y su salida a continuación.
<?php
$host = "localhost";
$username = "root";
$password = "";
$database = "person";
$connection = mysqli_connect($host, $username, $password, $database)
or die("Connection Failed");
$sql = "SELECT * FROM person";
$result = mysqli_query($connection, $sql);
$error_message = mysqli_errno($connection);
if($error_message == 1146){
echo "You are trying to read the data from a table which doesn't exist in your database "."'".$database."'";
}
mysqli_close($connection);
?>
Producción:
Función mysqli_error_list()
en MySQL
Esta función es muy útil para conocer el código de error, el estado de SQL y la descripción del error porque esta función devuelve un array que contiene toda la información necesaria.
Código de ejemplo:
<?php
$host = "localhost";
$username = "root";
$password = "";
$database = "person";
$connection = mysqli_connect($host, $username, $password, $database)
or die("Connection Failed");
$sql = "SELECT * FROM person";
$result = mysqli_query($connection, $sql);
print_r(mysqli_error_list($connection));
mysqli_close($connection);
?>
Producción:
Función mysqli_connect_error()
en MySQL
mysqli_connect_error()
devuelve la descripción del error de la última conexión, si la hay. Aunque, la función die()
también informa sobre la conexión fallida, pero mysqli_connect_error()
devuelve el error que podemos entender fácilmente.
Escriba primero el siguiente código, vea su salida y luego lo compararemos con la salida producida por mysqli_connect_error()
.
<?php
$host = "localhost";
$username = "root";
$password = "";
$database = "person";
$connection = mysqli_connect($host, $username, $password, $database)
or die("Connection Failed");
$sql = "SELECT * FROM person";
$result = mysqli_query($connection, $sql);
$error_message = mysqli_error($connection);
if($error_message != ""){
echo "Query Failed: ".$error_message;
}
mysqli_close($connection);
?>
Producción:
Vea la salida dada arriba; puede ver que el error que podemos entender está en algún lugar en el medio.
Imagínese, si tiene 2 o 3 errores, no sería fácil averiguarlo. Ahora, use mysqli_connect_error()
y vea la diferencia usando el siguiente código y salida.
<?php
$host = "localhost";
$username = "newroot";
$password = "";
$database = "person";
$connection = mysqli_connect($host, $username, $password, $database)
or die("Connection Failed: ".mysqli_connect_error());
$sql = "SELECT * FROM teacher";
$result = mysqli_query($connection, $sql);
$error_message = mysqli_error($connection);
if($error_message != ""){
echo "SQL Query Failed: ".$error_message;
}
mysqli_close($connection);
?>
Producción:
El resultado anterior dice claramente que no hay ningún usuario llamado newroot
, que no le permita acceder a la base de datos.
Función mysqli_connect_errno()
en MySQL
Esta función se comporta como mysqli_connect_error()
pero muestra el código de error en lugar del mensaje de error. Podemos usar este código de error para escribir mensajes de error personalizados.
Código de ejemplo:
<?php
$host = "localhost";
$username = "newroot";
$password = "";
$database = "person";
$connection = mysqli_connect($host, $username, $password, $database)
or die("Connection Failed: ".mysqli_connect_errno());
$sql = "SELECT * FROM teacher";
$result = mysqli_query($connection, $sql);
$error_message = mysqli_error($connection);
if($error_message != ""){
echo "SQL Query Failed: ".$error_message;
}
mysqli_close($connection);
?>
Producción:
Conclusión
Teniendo en cuenta toda la discusión y los ejemplos, hemos concluido dos categorías principales. La primera categoría muestra los errores sobre las consultas SQL y la otra sobre las conexiones a la base de datos.
Dependiendo de las necesidades del proyecto, podemos imprimir el mensaje de error o el código de error en cada categoría.