データベースの相互作用を含むPHPアプリケーションを開発する場合、データベースの操作エラーのキャプチャと処理が重要です。システムが迅速に応答し、エラーが発生したときにアラームを発行できるようにするために、 mysqli :: $ errno関数を使用して、エラー監視とアラーム構成を実行できます。この記事では、この機能をデータベース監視アラームシステムに統合する方法を詳細に説明します。
mysqli :: $ errnoはMySQLIクラスのプロパティであり、最新のMySQL操作のエラーコードを示しています。データベース操作を実行するとき、エラーが発生した場合、プロパティには特定のエラー番号が含まれます。このエラー番号に基づいて、さらにエラー処理またはアラームを実行できます。
$mysqli = new mysqli("localhost", "user", "password", "database");
if ($mysqli->connect_error) {
echo "接続エラー (" . $mysqli->connect_errno . "): " . $mysqli->connect_error;
}
上記の例では、 mysqliを接続するときにエラーが発生した場合、 $ mysqli-> connect_errnoはエラーコードを返します。これにより、アラームメカニズムをトリガーできます。
データベース操作中にタイムリーに監視および警告するために、 mysqli :: $ errnoを組み合わせてこの要件を達成できます。具体的には、次の手順を使用できます。
データベースと対話するたびに、 mysqli :: $ errnoを確認して、エラーが発生したかどうかを判断する必要があります。たとえば、クエリを実行したりデータを挿入したりすると、エラーが発生したときにエラーメッセージを記録してアラームをトリガーできます。
$query = "SELECT * FROM users";
$result = $mysqli->query($query);
if ($mysqli->errno) {
// エラーが発生したとき,エラー情報を記録します
error_log("MySQL エラーコード: " . $mysqli->errno . " エラーメッセージ: " . $mysqli->error);
// トリガーアラーム
sendAlert($mysqli->errno, $mysqli->error);
}
データベースエラーが検出されると、 SendAlert関数を介してアラームを送信できます。この関数は、メール、テキストメッセージ、またはその他の手段で管理者に通知できます。ここでは、電子メールを使用して、例としてアラームを送信します。
function sendAlert($errno, $error_message) {
$to = "admin@m66.net"; // 管理者のメール
$subject = "データベースエラーアラーム";
$message = "データベースエラーが発生しました,エラーコード: $errno,エラーメッセージ: $error_message";
// メールを送信します
mail($to, $subject, $message);
}
データベースエラーは、接続タイムアウトなど、システムの通常の操作などのために一時的な問題になる場合があります。頻繁なアラームを避けるために、アラームしきい値を設定できます。これにより、エラーの数が一定の制限を超えた場合にのみアラームがトリガーされます。
// 記録されたエラーの数
$alertThreshold = 5;
$errorCount = 0;
// 假设エラーが発生したとき会执行下面的代码
if ($mysqli->errno) {
$errorCount++;
// エラーの数がしきい値を超える場合,アラームを送信します
if ($errorCount >= $alertThreshold) {
sendAlert($mysqli->errno, $mysqli->error);
$errorCount = 0; // エラー数をリセットします
}
}
さまざまな種類のデータベースエラーには、異なる処理方法が必要になる場合があります。たとえば、接続エラーとクエリエラーには、アラームポリシーが異なる場合があります。エラーコードに基づいてエラータイプを区別し、さまざまな測定値を取ることができます。
if ($mysqli->errno) {
switch ($mysqli->errno) {
case 1045: // 許可エラー
sendAlert($mysqli->errno, "許可エラー: " . $mysqli->error);
break;
case 2002: // 接続エラー
sendAlert($mysqli->errno, "接続に失敗しました: " . $mysqli->error);
break;
default:
sendAlert($mysqli->errno, "不明なエラー: " . $mysqli->error);
}
}
MySqli :: $ errnoを使用してデータベース監視アラームを実装する方法を示す完全なコード例の簡略化されたバージョンを次に示します。