L'utilisation de bases de données MySQL est une opération courante lors du développement d'applications PHP. Dans PHP, nous utilisons souvent la classe MySQLI pour interagir avec la base de données MySQL. Avec MySQLI , nous pouvons facilement effectuer des requêtes de base de données, obtenir des résultats et effectuer d'autres opérations de base de données. Cependant, lors de l'écriture du code de manipulation de la base de données, nous pouvons ignorer certains détails, ce qui fait que le code se trompe dans certaines situations spécifiques.
Parmi eux, un problème commun est qu'avant d'accès à la propriété mysqli :: $ Errno , oubliez de vérifier si la connexion de la base de données est réussie. Jetons un coup d'œil à ce que les problèmes causeront si la connexion n'est pas vérifiée avec succès.
MySQLI :: $ Errno est une propriété très utile lors de l'exécution des opérations de base de données à l'aide de MySQLI . Il représente le code d'erreur pour l'opération de base de données précédente. Lorsque vous effectuez des opérations telles que la requête ou l'insertion, si une erreur se produit, Errno renvoie une valeur entière indiquant le type d'erreur. Si aucune erreur ne se produit, sa valeur sera 0.
Par exemple:
$mysqli = new mysqli("localhost", "user", "password", "database");
if ($mysqli->connect_error) {
echo "Échec de la connexion: " . $mysqli->connect_error;
exit();
}
$query = "SELECT * FROM table";
$result = $mysqli->query($query);
if ($mysqli->errno) {
echo "Erreur de requête: " . $mysqli->errno . " - " . $mysqli->error;
}
Dans l'exemple ci-dessus, $ mysqli-> errno est utilisé pour obtenir le code d'erreur et le traiter.
Habituellement, nous vérifierons si la connexion de la base de données est réussie avant chaque opération de base de données, par exemple, pour juger par l'attribut connect_error . Si la connexion de la base de données échoue, mais que nous ne vérifions pas l'état de la connexion et effectuons directement l'opération de requête, cela entraînera de graves erreurs.
Considérez le code suivant:
$mysqli = new mysqli("localhost", "user", "password", "database");
$query = "SELECT * FROM table";
$result = $mysqli->query($query);
if ($mysqli->errno) {
echo "Erreur de requête: " . $mysqli->errno . " - " . $mysqli->error;
}
Dans cet exemple, nous ne déterminons pas si MySQLI est connecté avec succès à la base de données. Si la connexion de la base de données échoue, $ mysqli-> query () ne sera pas exécuté, et $ mysqli-> errno ne contiendra pas le message d'erreur correct, qui peut renvoyer 0 ou d'autres valeurs non liées, ce qui entraîne l'incapacité de localiser avec précision le problème.
Plus précisément, ce qui suit est les problèmes qui peuvent survenir:
Si la connexion n'est pas vérifiée pour le succès avant d'exécuter la requête, le programme peut continuer à s'exécuter, ce qui entraîne une valeur errno incorrecte. Par exemple, si la connexion de la base de données échoue, le code d'erreur ne reflète pas la situation réelle de l'échec de la connexion, mais reflète plutôt l'erreur de l'opération de requête, qui peut obscurcir le processus de débogage du développeur.
Si nous ne vérifions pas quand la connexion échoue, le programme peut ne pas donner de message d'erreur clair, ce qui nous fait ne pas être en mesure de découvrir rapidement le problème. Par exemple, une erreur de connexion peut être ignorée et le programme continuera de s'exécuter comme une requête normale jusqu'à ce que d'autres erreurs non pertinentes se produisent. Cette situation fait souvent se perdre dans une série de réactions en chaîne, ce qui rend difficile la recherche de la véritable source de l'erreur.
Dans certains cas, si l'état de la connexion n'est pas vérifié en premier, le message d'erreur peut révéler des informations sensibles liées à la base de données. Par exemple, le message d'erreur peut contenir des chaînes de connexion de base de données ou d'autres données sensibles. Grâce à la méthode de gestion des erreurs, un attaquant peut avoir la possibilité d'obtenir des informations sur la structure du système, ce qui peut même conduire à l'émergence de vulnérabilités de sécurité.
Pour éviter les problèmes ci-dessus, nous devons vérifier si la connexion est réussie avant d'effectuer des opérations de base de données. Voici un exemple de code correct:
$mysqli = new mysqli("localhost", "user", "password", "database");
if ($mysqli->connect_error) {
die("Échec de la connexion: " . $mysqli->connect_error);
}
$query = "SELECT * FROM table";
$result = $mysqli->query($query);
if ($mysqli->errno) {
echo "Erreur de requête: " . $mysqli->errno . " - " . $mysqli->error;
}
Dans ce code, nous vérifions d'abord si le Connect_error est vide pour déterminer si la connexion de la base de données est réussie. Si la connexion échoue, le programme se terminera tôt et un message d'erreur sera affiché. Si la connexion réussit, l'opération de requête continue et lors de la demande, utilisez $ mysqli-> errno correctement pour vérifier les erreurs.
J'ai oublié de vérifier si la connexion réussit avant d'effectuer une opération de base de données peut entraîner plusieurs problèmes tels que des codes d'erreur incorrects, des erreurs de connexion cachées et même des problèmes de sécurité potentiels. Pour éviter ces problèmes, assurez-vous d'abord de confirmer que la connexion réussit avant chaque opération de base de données. Cela rendra le programme plus robuste et les informations d'erreur plus précises, tout en améliorant la maintenabilité et la sécurité du code.
J'espère que cet article vous aidera à comprendre pourquoi vous devez d'abord déterminer si la connexion réussit avant d'utiliser mysqli :: $ errno et éviter les problèmes causés en ignorant ce détail.