Dans PHP, l'extension MySQLI est utilisée pour interagir avec une base de données MySQL. Lors de l'exécution d'une requête de base de données, l'attribut d'erreur MySQLI :: $ fournit le message d'erreur renvoyé par la base de données MySQL actuellement connectée. Si la requête échoue, l'erreur MySQLI :: $ stockera les informations d'erreur renvoyées par MySQL, et les développeurs peuvent utiliser cette propriété pour effectuer la gestion des erreurs et le débogage.
Dans les applications multilingues, l'utilisation directe des messages d'erreur MySQL ne convient pas à l'affichage aux utilisateurs car il est généralement en anglais ou en description technique et ne convient pas aux utilisateurs ordinaires. Par conséquent, nous devons combiner MySQLI :: $ Erreur pour créer des invites d'erreur qui prennent en charge les multilingues.
Le cœur de l'implémentation de la fonction d'invite d'erreur multilingue réside dans la sélection dynamique des informations d'erreur via les préférences linguistiques de l'utilisateur. Voici quelques étapes clés:
Tout d'abord, vous devez obtenir les paramètres de la langue de l'utilisateur. En règle générale, les paramètres du langage utilisateur sont stockés dans une session ou obtenus via l'en-tête de demande d' acceptation du navigateur. Pour plus de simplicité, nous supposons que la langue est déjà stockée dans $ _SESSION ['Lang'] .
<span><span><span class="hljs-comment">// Obtenez la langue actuelle,La valeur par défaut est l'anglais</span></span><span>
</span><span><span class="hljs-variable">$lang</span></span><span> = </span><span><span class="hljs-keyword">isset</span></span><span>(</span><span><span class="hljs-variable">$_SESSION</span></span><span>[</span><span><span class="hljs-string">'lang'</span></span><span>]) ? </span><span><span class="hljs-variable">$_SESSION</span></span><span>[</span><span><span class="hljs-string">'lang'</span></span><span>] : </span><span><span class="hljs-string">'en'</span></span><span>;
</span></span>
Nous pouvons définir le texte de l'invite d'erreur dans un tableau multidimensionnel, chaque langue correspondant à un sous-réseau. De cette façon, tous les messages d'erreur peuvent être trouvés dans le tableau.
<span><span><span class="hljs-variable">$errorMessages</span></span><span> = [
</span><span><span class="hljs-string">'en'</span></span><span> => [
</span><span><span class="hljs-string">'invalid_query'</span></span><span> => </span><span><span class="hljs-string">'There was an error with the SQL query.'</span></span><span>,
</span><span><span class="hljs-string">'connection_failed'</span></span><span> => </span><span><span class="hljs-string">'Failed to connect to the database.'</span></span><span>,
</span><span><span class="hljs-string">'unknown_error'</span></span><span> => </span><span><span class="hljs-string">'An unknown error occurred.'</span></span><span>,
],
</span><span><span class="hljs-string">'zh'</span></span><span> => [
</span><span><span class="hljs-string">'invalid_query'</span></span><span> => </span><span><span class="hljs-string">'SQL Une erreur s'est produite dans la requête。'</span></span><span>,
</span><span><span class="hljs-string">'connection_failed'</span></span><span> => </span><span><span class="hljs-string">'La connexion de la base de données a échoué。'</span></span><span>,
</span><span><span class="hljs-string">'unknown_error'</span></span><span> => </span><span><span class="hljs-string">'Une erreur inconnue s'est produite。'</span></span><span>,
],
</span><span><span class="hljs-comment">// Vous pouvez continuer à ajouter d'autres langues</span></span><span>
];
</span></span>
Ensuite, nous pouvons créer une fonction de gestion des erreurs personnalisée qui affiche des invites appropriées en fonction de la langue actuelle et du message d'erreur MySQL.
<span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">getErrorMessage</span></span><span>(</span><span><span class="hljs-params"><span class="hljs-variable">$error</span></span></span><span>, </span><span><span class="hljs-variable">$lang</span></span><span> = </span><span><span class="hljs-string">'en'</span></span><span>) {
</span><span><span class="hljs-keyword">global</span></span><span> </span><span><span class="hljs-variable">$errorMessages</span></span><span>;
</span><span><span class="hljs-comment">// Message d'erreur pour sélectionner la langue</span></span><span>
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-keyword">isset</span></span><span>(</span><span><span class="hljs-variable">$errorMessages</span></span><span>[</span><span><span class="hljs-variable">$lang</span></span><span>]) && </span><span><span class="hljs-keyword">isset</span></span><span>(</span><span><span class="hljs-variable">$errorMessages</span></span><span>[</span><span><span class="hljs-variable">$lang</span></span><span>][</span><span><span class="hljs-variable">$error</span></span><span>])) {
</span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-variable">$errorMessages</span></span><span>[</span><span><span class="hljs-variable">$lang</span></span><span>][</span><span><span class="hljs-variable">$error</span></span><span>];
}
</span><span><span class="hljs-comment">// Si aucun message d'erreur correspondant n'est trouvé,Renvoie le message d'erreur anglais par défaut</span></span><span>
</span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-variable">$errorMessages</span></span><span>[</span><span><span class="hljs-string">'en'</span></span><span>][</span><span><span class="hljs-variable">$error</span></span><span>] ?? </span><span><span class="hljs-string">'An error occurred.'</span></span><span>;
}
</span></span>
Ensuite, dans le fonctionnement de la base de données, vous pouvez obtenir les informations d'erreur de la base de données via MySQLI :: $ Erreur , puis la combiner avec une fonction de gestion des erreurs personnalisée pour renvoyer une invite d'erreur multi-langues.
<span><span><span class="hljs-variable">$mysqli</span></span><span> = </span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-title function_ invoke__">mysqli</span></span><span>(</span><span><span class="hljs-string">'localhost'</span></span><span>, </span><span><span class="hljs-string">'user'</span></span><span>, </span><span><span class="hljs-string">'password'</span></span><span>, </span><span><span class="hljs-string">'database'</span></span><span>);
</span><span><span class="hljs-comment">// Vérifiez si la connexion réussit</span></span><span>
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$mysqli</span></span><span>->connect_error) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-title function_ invoke__">getErrorMessage</span></span><span>(</span><span><span class="hljs-string">'connection_failed'</span></span><span>, </span><span><span class="hljs-variable">$lang</span></span><span>);
</span><span><span class="hljs-keyword">exit</span></span><span>();
}
</span><span><span class="hljs-comment">// Exécuter un SQL Requête</span></span><span>
</span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-variable">$mysqli</span></span><span>-></span><span><span class="hljs-title function_ invoke__">query</span></span><span>(</span><span><span class="hljs-string">'SELECT * FROM non_existent_table'</span></span><span>);
</span><span><span class="hljs-keyword">if</span></span><span> (!</span><span><span class="hljs-variable">$result</span></span><span>) {
</span><span><span class="hljs-comment">// Obtenir mysqli message d'erreur</span></span><span>
</span><span><span class="hljs-variable">$mysqlError</span></span><span> = </span><span><span class="hljs-variable">$mysqli</span></span><span>->error;
</span><span><span class="hljs-comment">// 根据message d'erreur决定错误类型</span></span><span>
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">strpos</span></span><span>(</span><span><span class="hljs-variable">$mysqlError</span></span><span>, </span><span><span class="hljs-string">'unknown column'</span></span><span>) !== </span><span><span class="hljs-literal">false</span></span><span>) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-title function_ invoke__">getErrorMessage</span></span><span>(</span><span><span class="hljs-string">'invalid_query'</span></span><span>, </span><span><span class="hljs-variable">$lang</span></span><span>);
} </span><span><span class="hljs-keyword">else</span></span><span> {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-title function_ invoke__">getErrorMessage</span></span><span>(</span><span><span class="hljs-string">'unknown_error'</span></span><span>, </span><span><span class="hljs-variable">$lang</span></span><span>);
}
}
</span><span><span class="hljs-variable">$mysqli</span></span><span>-></span><span><span class="hljs-title function_ invoke__">close</span></span><span>();
</span></span>
Pour optimiser davantage le code, nous pouvons stocker des informations d'erreur dans les fichiers linguistiques pour éviter toutes les informations du code dur dans des fichiers PHP. Chaque langue correspond à un fichier PHP, avec le contenu suivant:
en.php :
<span><span><span class="hljs-keyword">return</span></span><span> [
</span><span><span class="hljs-string">'invalid_query'</span></span><span> => </span><span><span class="hljs-string">'There was an error with the SQL query.'</span></span><span>,
</span><span><span class="hljs-string">'connection_failed'</span></span><span> => </span><span><span class="hljs-string">'Failed to connect to the database.'</span></span><span>,
</span><span><span class="hljs-string">'unknown_error'</span></span><span> => </span><span><span class="hljs-string">'An unknown error occurred.'</span></span><span>,
];
</span></span>
zh.php :
<span><span><span class="hljs-keyword">return</span></span><span> [
</span><span><span class="hljs-string">'invalid_query'</span></span><span> => </span><span><span class="hljs-string">'SQL Une erreur s'est produite dans la requête。'</span></span><span>,
</span><span><span class="hljs-string">'connection_failed'</span></span><span> => </span><span><span class="hljs-string">'La connexion de la base de données a échoué。'</span></span><span>,
</span><span><span class="hljs-string">'unknown_error'</span></span><span> => </span><span><span class="hljs-string">'Une erreur inconnue s'est produite。'</span></span><span>,
];
</span></span>
Chargez dynamiquement le fichier de langue correspondant dans le code:
<span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">loadErrorMessages</span></span><span>(</span><span><span class="hljs-params"><span class="hljs-variable">$lang</span></span></span><span>) {
</span><span><span class="hljs-variable">$filePath</span></span><span> = </span><span><span class="hljs-keyword">__DIR__</span></span><span> . </span><span><span class="hljs-string">"/lang/<span class="hljs-subst">{$lang}</span></span></span><span>.php";
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">file_exists</span></span><span>(</span><span><span class="hljs-variable">$filePath</span></span><span>)) {
</span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-keyword">include</span></span><span>(</span><span><span class="hljs-variable">$filePath</span></span><span>);
}
</span><span><span class="hljs-comment">// Si le fichier de langue n'existe pas,Chargez le fichier anglais</span></span><span>
</span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-keyword">include</span></span><span>(</span><span><span class="hljs-keyword">__DIR__</span></span><span> . </span><span><span class="hljs-string">'/lang/en.php'</span></span><span>);
}
</span><span><span class="hljs-variable">$errorMessages</span></span><span> = </span><span><span class="hljs-title function_ invoke__">loadErrorMessages</span></span><span>(</span><span><span class="hljs-variable">$lang</span></span><span>);
</span></span>
De cette façon, chaque fois qu'un message d'erreur est nécessaire, il vous suffit de charger les informations rapides correspondantes du fichier de langue.
En combinant l'erreur MySQLI :: $ et un système d'invite d'erreur multilingue personnalisé, nous pouvons fournir des informations d'invite d'erreur plus conviviales aux utilisateurs dans différents endroits. Dans le développement multilingue, l'utilisation de cette méthode peut éviter d'exposer directement les informations d'erreur de la base de données et d'améliorer l'expérience utilisateur.
Étiquettes associées:
mysqli