Lorsque vous interagissez avec les bases de données MySQL à l'aide de PHP, nous devons souvent effectuer des requêtes SQL. Si la requête échoue, le mécanisme de gestion des erreurs correct peut nous aider à diagnostiquer le problème et à y faire face en conséquence. L'extension MySQLI fournit plusieurs outils pour aider les développeurs à attraper et à gérer les erreurs de requête SQL, y compris les méthodes MySQLI_STMT :: $ Erreur et MySQLI_STMT :: STORE_RESULT () .
Cet article expliquera en détail comment utiliser ces deux méthodes pour détecter et traiter les défaillances de requête SQL et afficher le code PHP correspondant.
Lors de l'exécution de requêtes SQL, MySQLI_STMT :: $ Error est une propriété très utile qui peut obtenir des informations d'erreur lorsque l'instruction SQL actuelle est exécutée. En vérifiant cette propriété, nous pouvons rapidement déterminer si la requête est exécutée avec succès.
<?php
// Connexion de base de données
$mysqli = new mysqli("localhost", "username", "password", "database");
// Vérifiez la connexion
if ($mysqli->connect_error) {
die("Échec de la connexion: " . $mysqli->connect_error);
}
// Préparer SQL Déclaration
$query = "SELECT * FROM users WHERE id = ?";
$stmt = $mysqli->prepare($query);
// examiner SQL Déclaration是否Préparer成功
if ($stmt === false) {
die("PréparerDéclaration失败: " . $mysqli->error);
}
// Lier les paramètres
$id = 1;
$stmt->bind_param("i", $id);
// Exécuter une requête
if (!$stmt->execute()) {
// utiliser mysqli_stmt::$error Obtenir un message d'erreur
die("Exécuter une requête失败: " . $stmt->error);
}
// Fermer la connexion
$stmt->close();
$mysqli->close();
?>
Dans cet exemple, nous obtenons les informations d'erreur détaillées lorsque la requête SQL échoue via $ stmt-> erreur . De cette façon, les développeurs peuvent comprendre les raisons spécifiques de la défaillance de la requête et effectuer un débogage ou une réparation supplémentaire.
La méthode mysqli_stmt :: store_result () est utilisée pour extraire l'ensemble de résultats de la poignée de l'instruction MySQLI et la stocker. Il est très utile pour gérer les ensembles de résultats des requêtes de sélection. Si la requête ne renvoie aucune ligne (comme les conditions de requête ne correspond pas), la méthode store_result () renvoie False, afin que nous puissions l'utiliser pour vérifier si la requête a obtenu avec succès les données.
<?php
// Connexion de base de données
$mysqli = new mysqli("localhost", "username", "password", "database");
// Vérifiez la connexion
if ($mysqli->connect_error) {
die("Échec de la connexion: " . $mysqli->connect_error);
}
// Préparer SQL Déclaration
$query = "SELECT * FROM users WHERE id = ?";
$stmt = $mysqli->prepare($query);
// examiner SQL Déclaration是否Préparer成功
if ($stmt === false) {
die("PréparerDéclaration失败: " . $mysqli->error);
}
// Lier les paramètres
$id = 1;
$stmt->bind_param("i", $id);
// Exécuter une requête
if (!$stmt->execute()) {
die("Exécuter une requête失败: " . $stmt->error);
}
// Stocker les ensembles de résultats
$stmt->store_result();
// examiner结果集的行数
if ($stmt->num_rows === 0) {
echo "Aucun utilisateur qui répond aux critères n'a été trouvé。";
} else {
// L'ensemble de résultats n'est pas vide,Effectuer un traitement des données
echo "Interroger réussi,Les résultats sont les suivants:";
// Résultats de traitement
}
$stmt->close();
$mysqli->close();
?>
Dans cet exemple, nous utilisons la méthode store_result () pour stocker le résultat de la requête en mémoire, puis utilisons $ stmt-> num_rows pour vérifier le nombre de lignes de résultat renvoyées. Si aucune ligne de données n'est retournée, nous pouvons gérer cette situation "sans résultat".
Lorsque vous utilisez MySQLI_STMT :: $ ERROR et MYSQLI_STMT :: STORE_RESULT () pour le traitement des erreurs, en plus de capturer les informations d'erreur et de vérifier le nombre de lignes de résultats, vous pouvez également faire de l'exploitation forestière et du débogage. Voici quelques conseils de traitement des erreurs courants:
Enregistrement : enregistrez des informations d'erreur dans un fichier journal au lieu de les afficher directement à l'utilisateur, ce qui peut éviter de divulguer des informations sensibles de la base de données.
Message d'erreur convivial : pour les utilisateurs finaux, fournissez des informations rapides pour éviter d'exposer le message d'erreur de la base de données sous-jacente.
Optimisation des requêtes SQL : Avant d'exécuter les requêtes, assurez-vous que les instructions SQL sont valides et évitez les vulnérabilités courantes de l'injection SQL.
En utilisant MySQLI_STMT :: $ ERROR et MYSQLI_STMT :: STORE_RESULT () , nous pouvons mieux gérer et détecter les échecs de requête SQL. Dans le développement réel, un bon mécanisme de gestion des erreurs peut non seulement améliorer la robustesse du code, mais aussi nous aider à localiser et à résoudre rapidement les problèmes dans un environnement de production.
En utilisant une combinaison de ces deux méthodes, vous pouvez capturer efficacement les détails des défaillances de requête et permettre aux développeurs de réagir rapidement pour gérer les défaillances de la requête.