Afficher les erreurs à l'aide des fonctions d'erreur MySQLi
MySQLi
est une fonction PHP utilisée pour accéder au serveur de base de données MySQL. Vous pouvez utiliser cette extension si vous avez MySQL version 4.1.13 ou supérieure.
Il existe différentes fonctions MySQLi
que vous pouvez utiliser pour exécuter différentes fonctions dans PHP. Dans cet article, nous allons apprendre les fonctions d’erreur MySQLi
.
Nous verrons également comment et où utiliser des exemples de code et observerons les sorties. Pour ce tutoriel, nous utiliserons MySQL version 8.0.27 et PHP version 7.4.1.
Fonctions d’erreur MySQLi
de PHP
Dans ce tutoriel, nous allons découvrir les fonctions d’erreur PHP MySQLi
suivantes :
mysqli_error()
mysqli_errno()
mysqli_error_list()
mysqli_connect_error()
mysqli_connect_errno()
Toutes ces fonctions peuvent être utilisées dans le style orienté objet et le style procédural. Comprenons les deux syntaxes en utilisant la fonction mysqli_error()
.
Syntaxe de la fonction mysqli_error()
dans le style orienté objet
string $mysqli->error;
Syntaxe de la fonction mysqli_error()
dans le style procédural
string mysqli_error ( mysqli $link )
mysqli_error()
Fonction dans MySQL
Cette fonction est utilisée pour afficher la dernière description d’erreur pour l’appel de fonction le plus récent (le cas échéant). Il est utilisé lorsque l’on veut savoir si la requête SQL
comporte une erreur ou non.
mysqli_error()
renvoie la description de l’erreur et une chaîne vide s’il n’y a pas d’erreur. Voir l’exemple suivant.
Exemple de code utilisant le style procédural :
<?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);
?>
Le code ci-dessus tente d’établir la connexion en utilisant les variables $host
, $username
, $password
, $database
et enregistre cette connexion dans la variable $connection
.
La fonction mysqli_error()
prendra cette variable de connexion $connection
comme paramètre et vérifiera s’il y a une erreur causée par le récent appel de la fonction MySQLi
qui est mysqli_query($connection, $sql)
ici.
Production :
Maintenant, changez le nom de la table dans la requête SQL
de teacher
à person
et observez le résultat donné ci-dessous.
Production :
En tant que développeur, nous pouvons facilement comprendre qu’il n’y a pas de table person
dans la base de données person
(c’est ce que cela signifie dans l’erreur ci-dessus).
Gardez le nom de la table modifié et remplacez la ligne $error_message = mysqli_error($connection);
avec $error_message = $connection->error;
pratiquer et comprendre le style orienté objet en utilisant la fonction d’erreur MySQLi
.
mysqli_errno()
Fonction dans MySQL
mysqli_errno()
fonctionne de la même manière que mysqli_error()
, mais il renverra le code d’erreur au lieu de la description de l’erreur.
Écrivez le code suivant pour pratiquer et comprendre. Vous avez peut-être remarqué que nous utilisons un style procédural pour pratiquer cette fonction.
<?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);
?>
Le code ci-dessus affichera la sortie suivante où vous verrez un nombre comme code d’erreur.
Production :
La question est, pourquoi utilisons-nous cette fonction pour afficher uniquement les chiffres ? Parce que si vous voulez imprimer un message d’erreur convivial (message personnalisé), vous pouvez utiliser ce code d’erreur dans les instructions if-else
.
Voir le code suivant et sa sortie ci-dessous.
<?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);
?>
Production :
mysqli_error_list()
Fonction dans MySQL
Cette fonction est très utile pour connaître le code d’erreur, l’état SQL et la description de l’erreur car cette fonction renvoie un tableau contenant toutes les informations nécessaires.
Exemple de code :
<?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);
?>
Production :
mysqli_connect_error()
Fonction dans MySQL
mysqli_connect_error()
renvoie la description de l’erreur de la dernière connexion s’il y en a une. Bien que la fonction die()
indique également l’échec de la connexion, mais mysqli_connect_error()
renvoie l’erreur que nous pouvons comprendre facilement.
Écrivez d’abord le code suivant, voyez sa sortie, puis nous la comparerons avec la sortie produite par 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);
?>
Production :
Voir la sortie donnée ci-dessus ; vous pouvez voir que l’erreur que nous pouvons comprendre se situe quelque part au milieu.
Imaginez, si vous avez 2 ou 3 erreurs, ce ne serait pas facile à trouver. Maintenant, utilisez mysqli_connect_error()
et voyez la différence en utilisant le code et la sortie suivants.
<?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);
?>
Production :
La sortie ci-dessus indique clairement qu’il n’y a pas d’utilisateur nommé newroot
, ce qui ne vous permet pas d’accéder à la base de données.
mysqli_connect_errno()
Fonction dans MySQL
Cette fonction se comporte comme mysqli_connect_error()
mais affiche le code d’erreur plutôt que le message d’erreur. Nous pouvons utiliser ce code d’erreur pour écrire des messages d’erreur personnalisés.
Exemple de code :
<?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);
?>
Production :
Conclusion
Compte tenu de toute la discussion et des exemples, nous avons conclu deux catégories principales. La première catégorie montre les erreurs sur les requêtes SQL et l’autre sur les connexions à la base de données.
Selon les besoins du projet, nous pouvons imprimer le message d’erreur ou le code d’erreur dans chaque catégorie.