PHPでは、 MySQLI拡張機能を使用してMySQLデータベースと対話します。データベースクエリを実行すると、 MySQLI :: $ ERROR属性は、現在接続されているMySQLデータベースによって返されるエラーメッセージを提供します。クエリが失敗した場合、 MySQLI :: $エラーはMySQLによって返されるエラー情報を保存し、開発者はこのプロパティを使用してエラー処理とデバッグを実行できます。
多言語アプリケーションでは、MySQLエラーメッセージを直接使用することは、通常英語または技術的な説明であり、通常のユーザーが読むのに適していないため、ユーザーへの表示には適していません。したがって、 mysqli :: $エラーを組み合わせて、マルチリンガルをサポートするエラープロンプトを作成する必要があります。
多言語エラープロンプト関数を実装するコアは、ユーザーの言語設定を介してエラー情報を動的に選択することにあります。ここにいくつかの重要なステップがあります:
まず、ユーザーの言語設定を取得する必要があります。通常、ユーザー言語設定はセッションに保存されるか、ブラウザのAccept-Languageリクエストヘッダーを介して取得されます。簡単にするために、言語はすでに$ _Session ['Lang']に保存されていると想定しています。
<span><span><span class="hljs-comment">// 現在の言語を取得します,デフォルトは英語です</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>
各言語がサブアレイに対応して、多次元配列でエラープロンプトテキストを定義できます。このようにして、すべてのエラーメッセージは配列に記載されています。
<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 クエリでエラーが発生しました。'</span></span><span>,
</span><span><span class="hljs-string">'connection_failed'</span></span><span> => </span><span><span class="hljs-string">'データベース接続に失敗しました。'</span></span><span>,
</span><span><span class="hljs-string">'unknown_error'</span></span><span> => </span><span><span class="hljs-string">'不明なエラーが発生しました。'</span></span><span>,
],
</span><span><span class="hljs-comment">// 他の言語を追加し続けることができます</span></span><span>
];
</span></span>
次に、現在の言語と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">// 言語を選択するためのエラーメッセージ</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">// 対応するエラーメッセージが見つからない場合,デフォルトの英語エラーメッセージを返します</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>
次に、データベース操作では、 MySQLI :: $エラーを介してデータベースのエラー情報を取得し、カスタムエラー処理関数と組み合わせてマルチ言語エラープロンプトを返すことができます。
<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">// 接続が成功しているかどうかを確認してください</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">// a SQL クエリ</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">// 得る mysqli エラーメッセージ</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">// 根据エラーメッセージ决定错误类型</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>
コードをさらに最適化するために、すべての情報をPHPファイルにハードコードしないように、言語ファイルにエラー情報を保存できます。各言語は、次のコンテンツを含むPHPファイルに対応しています。
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 クエリでエラーが発生しました。'</span></span><span>,
</span><span><span class="hljs-string">'connection_failed'</span></span><span> => </span><span><span class="hljs-string">'データベース接続に失敗しました。'</span></span><span>,
</span><span><span class="hljs-string">'unknown_error'</span></span><span> => </span><span><span class="hljs-string">'不明なエラーが発生しました。'</span></span><span>,
];
</span></span>
コードに対応する言語ファイルを動的にロードします。
<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">// 言語ファイルが存在しない場合,英語ファイルをロードします</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>
このようにして、エラーメッセージが必要になるたびに、言語ファイルから対応するプロンプト情報をロードするだけです。
MySQLI :: $エラーとカスタム多言語エラープロンプトシステムを組み合わせることにより、さまざまなロケールのユーザーにより友好的なエラープロンプト情報を提供できます。多言語開発では、この方法を使用すると、データベースのエラー情報が直接公開され、ユーザーエクスペリエンスが向上します。
関連タグ:
mysqli