PHP開発では、データベース操作が最も一般的な部分です。特にMySQLI拡張機能を使用する場合、データベースと対話する場合、プログラムのデバッグとメンテナンスにはエラーキャプチャと記録が重要です。 MySQLIは、MySQLI :: $ errnoおよびmysqli :: $エラー属性を提供し、開発者がデータベース操作のエラーの特定の原因を理解できるようにします。
この記事では、効果的なエラーロギングのためにMySQLI :: $ ERRNOを使用する方法を紹介します。開発者は、データベース接続と操作中に発生する可能性のあるエラーをよりよく処理できます。
mysqli :: $ errnoは、最後のデータベース操作でエラーが発生したときにエラーコードを保存するために使用されるmysqliクラスのプロパティです。このエラーコードは、発生した特定のエラータイプを識別する整数値です。 mysqli :: $ errnoは、データベース操作でエラーが発生した場合にのみ有効な値を取得できます。エラーが発生しない場合、その値は0になります。
さらに、 mysqli :: $ error属性には、エラーの詳細な説明(つまり、エラーメッセージ)が含まれています。これらの2つの属性は、開発者が問題を正確に診断するのに役立ちます。
mysqli :: $ errnoのエラーコード値が事前に定義されています。一般的なエラーコードとその意味は次のとおりです。
1045 :データベースにアクセスするときの認証エラー(ユーザー名やパスワードエラーなど)。
2002 :通常、データベースホストが到達できないため、接続に失敗しました。
1146 :テーブルは存在しません。
1064 :SQL構文エラー。
実際の開発では、エラーのキャッチに加えて、通常、これらのエラーを記録して後で表示して分析する必要があります。 Mysqli :: $ errnoおよびmysqli :: $エラーの使用方法を示す基本的な例を示します。
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-comment">// データベース接続パラメーターを構成します</span></span><span>
</span><span><span class="hljs-variable">$host</span></span><span> = </span><span><span class="hljs-string">'localhost'</span></span><span>;
</span><span><span class="hljs-variable">$user</span></span><span> = </span><span><span class="hljs-string">'root'</span></span><span>;
</span><span><span class="hljs-variable">$password</span></span><span> = </span><span><span class="hljs-string">'password'</span></span><span>;
</span><span><span class="hljs-variable">$dbname</span></span><span> = </span><span><span class="hljs-string">'test_db'</span></span><span>;
</span><span><span class="hljs-comment">// データベース接続を作成します</span></span><span>
</span><span><span class="hljs-variable">$conn</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-variable">$host</span></span><span>, </span><span><span class="hljs-variable">$user</span></span><span>, </span><span><span class="hljs-variable">$password</span></span><span>, </span><span><span class="hljs-variable">$dbname</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">$conn</span></span><span>->connect_error) {
</span><span><span class="hljs-comment">// ログ接続エラー</span></span><span>
</span><span><span class="hljs-title function_ invoke__">error_log</span></span><span>(</span><span><span class="hljs-string">"Connection failed: "</span></span><span> . </span><span><span class="hljs-variable">$conn</span></span><span>->connect_error, </span><span><span class="hljs-number">3</span></span><span>, </span><span><span class="hljs-string">'errors.log'</span></span><span>);
</span><span><span class="hljs-keyword">exit</span></span><span>();
}
</span><span><span class="hljs-comment">// クエリを実行します</span></span><span>
</span><span><span class="hljs-variable">$sql</span></span><span> = </span><span><span class="hljs-string">"SELECT * FROM non_existent_table"</span></span><span>;
</span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-variable">$conn</span></span><span>-></span><span><span class="hljs-title function_ invoke__">query</span></span><span>(</span><span><span class="hljs-variable">$sql</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">$result</span></span><span>) {
</span><span><span class="hljs-comment">// クエリが失敗した場合,ログエラー情報とエラーコード</span></span><span>
</span><span><span class="hljs-title function_ invoke__">error_log</span></span><span>(</span><span><span class="hljs-string">"Error: "</span></span><span> . </span><span><span class="hljs-variable">$conn</span></span><span>->errno . </span><span><span class="hljs-string">" - "</span></span><span> . </span><span><span class="hljs-variable">$conn</span></span><span>->error . </span><span><span class="hljs-string">"\n"</span></span><span>, </span><span><span class="hljs-number">3</span></span><span>, </span><span><span class="hljs-string">'errors.log'</span></span><span>);
}
</span><span><span class="hljs-comment">// 接続を閉じます</span></span><span>
</span><span><span class="hljs-variable">$conn</span></span><span>-></span><span><span class="hljs-title function_ invoke__">close</span></span><span>();
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>
この例では、最初にデータベースに接続してみてください。接続が失敗した場合、接続エラーがerrors.logファイルにログインされます。次に、クエリ操作を実行し、存在しないテーブルからデータを取得しようとします。クエリが失敗した場合、エラーメッセージをキャプチャし、エラーコードとエラーメッセージを一緒に記録します。
制作環境では、エラーログの記録にはある程度の適時性が必要なため、エラーログレコードをエラーログレコードに追加できます。これにより、問題の追跡が簡単です。
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-comment">// 現在の時間を取得します</span></span><span>
</span><span><span class="hljs-variable">$date</span></span><span> = </span><span><span class="hljs-title function_ invoke__">date</span></span><span>(</span><span><span class="hljs-string">'Y-m-d H:i:s'</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">$result</span></span><span>) {
</span><span><span class="hljs-comment">// ログにタイムスタンプを追加します</span></span><span>
</span><span><span class="hljs-title function_ invoke__">error_log</span></span><span>(</span><span><span class="hljs-string">"[<span class="hljs-subst">$date</span></span></span><span>] Error: " . </span><span><span class="hljs-variable">$conn</span></span><span>->errno . </span><span><span class="hljs-string">" - "</span></span><span> . </span><span><span class="hljs-variable">$conn</span></span><span>->error . </span><span><span class="hljs-string">"\n"</span></span><span>, </span><span><span class="hljs-number">3</span></span><span>, </span><span><span class="hljs-string">'errors.log'</span></span><span>);
}
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>
各エラーログに現在の時間を追加することにより、各エラーの特定の時間をはっきりと見ることができ、開発者がより正確なトラブルシューティングを実施するのに役立ちます。
時間が経つにつれて、エラーログファイルは非常に大きくなり、システムのパフォーマンスと保守性に影響します。したがって、エラーログを定期的にクリーニングおよびアーカイブすることが非常に重要です。次の方法を使用して、エラーログの管理を最適化できます。
通常のアーカイブとクリーンアップ:スケジュールされたタスクを設定して、エラーログファイルを定期的にアーカイブし、古いログファイルをクリーンにします。
ログ回転:ログ回転ツール(ログロテートなど)を使用して、ログファイルのサイズを自動的に管理します。
グレーディングログ:エラーの重大度に応じて、異なるログレベル(情報、警告、エラーなど)が記録に使用されます。
mysqli :: $ errnoおよびmysqli :: $エラーを使用すると、PHP開発者はデータベース操作でエラーを簡単にキャッチして記録できます。タイムスタンプ、ログファイル管理、クリーニング戦略の組み合わせ、エラーログ記録と最適化を効果的に実行できます。これらの測定は、開発者が開発段階とテスト段階でタイムリーに問題を発見するのに役立つだけでなく、生産環境での後でトラブルシューティングの重要な手がかりを提供するのに役立ちます。
この記事の導入を通じて、効果的なエラーログのためにMySqli :: $ errnoの使用方法をよりよく理解し、実際の開発に適用して、コードの堅牢性と保守性を向上させることを願っています。