Lorsque nous utilisons PHP pour les opérations de base de données, nous interagissons généralement avec la base de données MySQL via l'extension MySQLI . MySQL fournit des fonctionnalités riches, l'un des attributs couramment utilisés est Errno , qui représente le code d'erreur pour les opérations de base de données. Si mysqli :: $ errno renvoie 0, cela signifie généralement qu'aucune erreur ne s'est produite. Cependant, le rendement 0 signifie-t-il qu'il n'y a pas de problème avec l'opération de base de données? Cet article discutera en détail de cette question.
Dans PHP, MySQLI :: $ Errno est une propriété de l'objet MySQLI , renvoyant le code d'erreur de la dernière opération de base de données. Spécifiquement:
Si l'opération est réussie et qu'aucune erreur ne se produit, la valeur d' errno sera 0.
Si l'opération échoue, Errno renvoie un code d'erreur non nulle et vous pouvez utiliser l'attribut MySQLI :: $ Erreur pour obtenir des informations d'erreur plus détaillées.
Exemple de code:
<?php
$mysqli = new mysqli("localhost", "user", "password", "database");
if ($mysqli->connect_errno) {
echo "Échec de la connexion: " . $mysqli->connect_error;
exit();
}
$query = "SELECT * FROM users";
$result = $mysqli->query($query);
if ($mysqli->errno) {
echo "Erreur de requête: " . $mysqli->error;
} else {
echo "Interroger réussi!";
}
?>
Dans cet exemple, si la requête est réussie, $ mysqli-> errno renvoie 0. Si la requête échoue, $ mysqli-> errno renvoie un code d'erreur non nulle et $ mysqli-> error fournira des informations spécifiques sur l'erreur.
Bien que MySQLI :: $ Errno soit 0 signifie généralement qu'il n'y a pas d'erreurs dans le fonctionnement de la base de données, cela ne signifie pas que l'opération est tout à fait correcte. Voici quelques situations communes où le problème peut encore exister même si Errno renvoie 0.
Même si la connexion de la base de données est réussie, l'instruction SQL de requête peut être logiquement erronée. Par exemple, la table de requête n'existe pas ou le résultat retourné est vide.
Exemple:
<?php
$mysqli = new mysqli("localhost", "user", "password", "database");
if ($mysqli->connect_errno) {
echo "Échec de la connexion: " . $mysqli->connect_error;
exit();
}
$query = "SELECT * FROM non_existent_table"; // Interroger une table qui n'existe pas
$result = $mysqli->query($query);
if ($mysqli->errno) {
echo "Erreur de requête: " . $mysqli->error;
} else {
if ($result->num_rows == 0) {
echo "Aucune donnée trouvée!";
} else {
echo "Interroger réussi!";
}
}
?>
Dans cet exemple, bien que MySQLI :: $ Errno renvoie 0, la table de requête n'existe pas, donc aucune donnée n'est réellement trouvée. Bien qu'il n'y ait pas de code d'erreur, le problème de la logique existe toujours.
L'extension MySQL génère des messages d'avertissement, mais ces avertissements ne sont pas capturés par Errno . Autrement dit, même s'il y a des avertissements, Errno peut toujours être 0.
Par exemple, lorsque certaines requêtes sont exécutées, MySQL peut émettre un avertissement au lieu d'une erreur. Si c'est juste un avertissement, Errno est toujours 0, mais vous devez faire attention si MySQL renvoie un avertissement.
<?php
$mysqli = new mysqli("localhost", "user", "password", "database");
if ($mysqli->connect_errno) {
echo "Échec de la connexion: " . $mysqli->connect_error;
exit();
}
$query = "SELECT id FROM users LIMIT 10"; // Hypothèses users La table a id Champs,Mais certaines données manquent
$result = $mysqli->query($query);
if ($mysqli->errno) {
echo "Erreur de requête: " . $mysqli->error;
} else {
echo "Interroger réussi!";
// S'il y a un avertissement,Peut être passé `mysqli::$warnings` Vérifier
$warnings = $mysqli->warnings;
if ($warnings) {
echo "Message d'avertissement: " . $warnings->message;
}
}
?>
Bien que MySQLI :: $ Errno renvoie 0 signifie généralement aucune erreur, pour assurer l'intégrité de l'opération de base de données, nous pouvons prendre les mesures suivantes:
Même s'il n'y a pas de code d'erreur, vérifiez si la requête renvoie le résultat attendu. Par exemple, vous pouvez vérifier MySQLI :: NUM_ROWS pour vérifier que la requête sélectionnée renvoie les données.
En vérifiant la propriété MySQLI :: $ WARNINGS , vous pouvez capturer des messages d'avertissement potentiels, en vous assurant qu'aucun problème potentiel ne manque.
Bien que MySQLI ne lance pas les exceptions en soi, vous pouvez le faire lancer des exceptions en définissant MySqli_Report (MySQLI_Report_strict) pour gérer mieux les erreurs.
Exemple:
<?php
mysqli_report(MYSQLI_REPORT_STRICT);
try {
$mysqli = new mysqli("localhost", "user", "password", "database");
$query = "SELECT * FROM users";
$result = $mysqli->query($query);
// Traiter les résultats de la requête
} catch (mysqli_sql_exception $e) {
echo "Exception attrapée: " . $e->getMessage();
}
?>
De cette façon, vous pouvez prendre des exceptions et les traiter en conséquence lorsque l'opération de la base de données échoue.
MySQLI :: $ Errno renvoie 0 indiquant qu'il n'y a pas d'erreur au niveau de fonctionnement de la base de données, mais ne signifie pas que le fonctionnement de la base de données est complètement exempt de problèmes. Afin de garantir l'exactitude des opérations de base de données, les développeurs doivent effectuer des vérifications supplémentaires, y compris la validité des résultats de la requête, le traitement des informations d'avertissement et l'utilisation de la gestion des exceptions. Ce n'est qu'en considérant ces facteurs d'une manière complète que la fiabilité et la robustesse des opérations de base de données peuvent être assurées.