Dans le développement de PHP, les propriétés d'erreur MySqli :: $ Errno et MySQLI :: $ jouent un rôle important lors de l'utilisation de MySQLI pour les opérations de base de données. MySQLI :: $ Errno est utilisé pour obtenir le code d'erreur pour la connexion actuelle, tandis que MySQLI :: $ Erreur est utilisé pour obtenir les informations d'erreur. Les développeurs rencontrent souvent ce problème: Dans plusieurs instances de connexion de la base de données, la valeur de MySqli :: $ Errno est-elle partagée? S'il est partagé, comment éviter les états d'erreur entre les différentes connexions s'affichent? Cet article analysera ce problème en profondeur et fournira certaines solutions pour éviter la contamination des états d'erreur.
mysqli :: $ errno est une propriété d'instance de l'objet mysqli qui contient des codes d'erreur liés à la connexion de la base de données actuelle. Dans les cas normaux, le rôle de mysqli :: $ errno est d'enregistrer l'état d'erreur dans l'instance de connexion de la base de données actuelle.
mysqli :: $ errno n'est pas partagé . Autrement dit, chaque instance de connexion MySQLI a son propre état Errno . Chaque connexion de base de données indépendante conservera indépendamment son propre code d'erreur, donc Errnos entre différentes instances de connexion ne se contaminera pas.
Cependant, si plusieurs instances de connexion sont créées via le même objet MySQLI , leurs états d'erreur peuvent interférer entre eux. Surtout lorsque vous utilisez plusieurs connexions de base de données et partagez un objet MySQLI , il est recommandé de faire attention à gérer l'état d'erreur de chaque connexion pour éviter les messages d'erreur incohérents.
Les problèmes se produisent principalement dans les situations suivantes:
Partage de la même connexion de la base de données : si plusieurs opérations partagent le même objet de connexion de base de données (c'est-à-dire la même instance MySQLI ), l'état d'erreur ( ERRNO ) sera écrasé par la dernière opération et le message d'erreur de l'opération précédente sera perdu.
Réutilisez la même instance MySQLI : Si vous utilisez à plusieurs reprises la même instance MySQLI à différents endroits et ne réinitialisez pas l'état d'erreur, cela peut entraîner la confusion des messages d'erreur et peut même affecter les opérations suivantes.
Afin d'éviter la contamination mutuelle entre plusieurs instances connectées, les méthodes suivantes peuvent être utilisées:
Le moyen le plus simple est de s'assurer que chaque connexion de la base de données utilise une instance MySQLI distincte. De cette façon, chaque connexion a ses propres états ERRNO et d'erreur et ne se affectera pas mutuellement.
// Créer la première connexion de base de données
$mysqli1 = new mysqli("localhost", "user1", "password1", "database1");
if ($mysqli1->connect_errno) {
echo "Échec de la connexion: " . $mysqli1->connect_error;
}
// Créer une deuxième connexion de base de données
$mysqli2 = new mysqli("localhost", "user2", "password2", "database2");
if ($mysqli2->connect_errno) {
echo "Échec de la connexion: " . $mysqli2->connect_error;
}
La classe MySQLI fournit la méthode reset_error , qui peut être utilisée pour réinitialiser manuellement l'état d'erreur de la connexion. Après chaque opération de base de données, appelez cette méthode pour effacer ERRNO et l'erreur pour éviter la contamination de la désinformation.
// Effectuer des opérations de base de données
$result = $mysqli->query("SELECT * FROM users");
if (!$result) {
echo "La requête a échoué: " . $mysqli->error;
}
// Réinitialisez l'état d'erreur
$mysqli->reset_error();
Si votre application doit interagir avec plusieurs bases de données, envisagez d'utiliser différentes configurations de connexion pour créer des instances de connexion indépendantes. En configurant différents noms d'hôtes, noms d'utilisateurs, mots de passe, etc., il est possible de s'assurer que chaque instance de connexion est exécutée sous différentes configurations et n'interfère pas entre elles.
// Utiliser la manipulation des exceptions pour attraper les erreurs
try {
$mysqli->query("SELECT * FROM non_existing_table");
} catch (Exception $e) {
echo "数据库La requête a échoué: " . $e->getMessage();
$mysqli->reset_error();
}