PHPアプリケーションを開発する場合、 MySQLI拡張機能はMySQLデータベースと対話する一般的な方法です。データベース操作エラーが発生すると、エラーコードは通常、 mysqli :: $ errnoを介して取得され、エラー情報はmysqli :: $ errorと組み合わせて取得されます。ただし、これらのエラー情報をログに効果的に分類、分析、記録する方法は、アプリケーションの信頼性を向上させるための重要なステップです。
この記事では、PHPのmysqli :: $ errnoおよびロギングシステムを介してMySQLエラーを分類および記録する方法について説明します。これにより、データベース接続の問題、クエリの障害、その他のエラーをより適切に追跡および処理できるため、後でトラブルシューティングと修理が容易になります。
まず、 mysqliを介してエラー情報を取得する方法を知る必要があります。 MySQLIクラスは、データベース関連のエラーをキャッチするのに役立ついくつかのプロパティを提供します。
mysqli :: $ errno :以前のmysql操作のエラーコードを返します。
mysqli :: $ error :以前のmysql操作のエラーメッセージを返します。
この情報を使用して、各データベース操作が成功したかどうかを確認できます。失敗した場合は、この情報を使用して詳細なエラー説明を取得できます。
<?php
$mysqli = new mysqli("localhost", "user", "password", "database");
// 接続を確認してください
if ($mysqli->connect_error) {
echo "接続に失敗しました: " . $mysqli->connect_error;
exit();
}
// a SQL クエリ
$result = $mysqli->query("SELECT * FROM non_existent_table");
if (!$result) {
// エラーコードとエラーメッセージをキャプチャします
$errno = $mysqli->errno;
$error = $mysqli->error;
echo "MySQL エラー番号: $errno, エラーメッセージ: $error";
}
?>
クエリの実行が失敗した場合、 mysqli :: $ errnoおよびmysqli :: $エラーを使用して、エラー情報をキャプチャして記録できます。
次に、これらのエラーメッセージをログシステムに統合します。ログファイルにエラー情報を出力するか、モノログなどの既存のログライブラリを使用して、より複雑なロギング関数を実装するのが一般的な慣行です。
最も簡単な方法は、PHPの組み込みロギング関数ERROR_LOG()を使用してエラーを記録することです。
<?php
// ログファイルパスを構成します
$log_file = "/path/to/your/logfile.log";
// 捕获エラーメッセージ并写入日志
if (!$result) {
$errno = $mysqli->errno;
$error = $mysqli->error;
$log_message = date("Y-m-d H:i:s") . " - エラー番号: $errno, エラーメッセージ: $error\n";
error_log($log_message, 3, $log_file);
}
?>
より柔軟なロギングのために、サードパーティライブラリとしてMonologを使用できます。 Monologは、ファイル、データベース、電子メール、その他のチャネルにログを出力できるさまざまなログプロセッサをサポートし、ログレベル(デバッグ、情報、エラーなど)をサポートします。
<?php
require 'vendor/autoload.php';
use Monolog\Logger;
use Monolog\Handler\StreamHandler;
// ログチャネルを作成します
$log = new Logger('my_logger');
$log->pushHandler(new StreamHandler('/path/to/your/logfile.log', Logger::ERROR));
// 执行クエリ并捕获間違い
if (!$result) {
$errno = $mysqli->errno;
$error = $mysqli->error;
// 记录エラーメッセージ到日志
$log->error("MySQL エラー番号: $errno, エラーメッセージ: $error");
}
?>
ログを介して、エラー情報を記録するだけでなく、異なるタイプのエラーに従って分類することもできます。たとえば、データベース接続の障害、SQLクエリの構文エラー、データ制約違反など。これらのエラーは、後の分析のために個別に記録できます。
さまざまなタイプのエラーに対して異なるログレベルを定義できます。
<?php
if ($mysqli->connect_error) {
$log->critical("数据库接続に失敗しました: " . $mysqli->connect_error);
} elseif (!$result) {
$errno = $mysqli->errno;
$error = $mysqli->error;
if ($errno == 1146) {
$log->warning("テーブルにエラーはありません: $error");
} else {
$log->error("他の MySQL 間違い: $error");
}
}
?>
この例では、データベース接続が失敗した場合、クリティカルレベルを使用してログを記録し、深刻なエラーを示します。テーブルに存在しないエラーの場合、警告レベルのレコードを使用します。
エラーログを使用すると、これらのログを分析して、アプリケーションの潜在的な問題を見つけることもできます。たとえば、 GREPコマンドを使用してログファイルに特定のエラーを見つけたり、いくつかのログ分析ツールを使用して、より詳細な分析を行うことができます。
データベースエラーを自動的に監視する場合は、一部のシステム監視ツール(ELKスタック、GrayLogなど)を組み合わせて、ログ集約と分析を通じてデータベースエラーを検出および応答できます。
MySQLI :: $ ERRNOをログシステムと統合することにより、MySQLデータベース操作のエラーをより適切に管理および監視できます。これにより、エラーをキャッチおよび分類するだけでなく、後のエラー分析とデバッグを容易にし、アプリケーションの信頼性と安定性が向上します。
MySQLIエラー情報と組み合わせて、プロジェクトでMonologのようなログライブラリを使用した場合、より効率的なエラー追跡と処理を実現できます。エラーの分類と分析もシステムを最適化する重要なステップであり、開発者が潜在的な問題を早期に発見するのに役立ちます。