現在の位置: ホーム> 最新記事一覧> mysqli :: $ errorおよびerror_log()を使用してデータベースエラーをログファイルにログインする方法?

mysqli :: $ errorおよびerror_log()を使用してデータベースエラーをログファイルにログインする方法?

M66 2025-07-01

mysqli :: $ errorおよびerror_log()を使用してデータベースエラーをログファイルにログインする方法?

データベースエラー処理は、PHPアプリケーションの開発の避けられない部分です。問題のトラブルシューティングとデバッグをより適切に行うには、データベースエラーをタイムリーに記録する必要があります。 PHPのMySQLI拡張機能は、データベース接続で最後のエラーメッセージを取得できる非常に実用的なプロパティMySQLI :: $エラーを提供します。 PHPの組み込みERROR_LOG()関数と組み合わせることで、エラー情報をログファイルに記録でき、開発者が生産環境で問題を追跡するのに役立ちます。

この記事では、 mysqli :: $ error_log()を使用してmysqlデータベースにエラー情報を記録し、指定されたファイルにエラーログを保存して、開発者がタイムリーに問題を発見および修正できるようにする方法を紹介します。

1。MySQLエラーメッセージを取得します

MySQLI拡張機能を使用してMySQLデータベースに接続する場合、SQL実行エラーが発生したときにMySQLI :: $エラープロパティを介してエラーメッセージが提供されます。このプロパティは、以前のデータベース操作のエラーメッセージ(クエリ、更新、挿入など)を返します。 mysqli :: $エラーは、最新の操作のエラーメッセージのみを返すことに注意してください。エラーがない場合、空の文字列が返されます。

 <span><span><span class="hljs-meta">&lt;?php</span></span><span>
</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">"root"</span></span><span>, </span><span><span class="hljs-string">"password"</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-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$mysqli</span></span><span>-&gt;connect_error) {
    </span><span><span class="hljs-keyword">die</span></span><span>(</span><span><span class="hljs-string">"接続に失敗しました: "</span></span><span> . </span><span><span class="hljs-variable">$mysqli</span></span><span>-&gt;connect_error);
}

</span><span><span class="hljs-comment">// 意図的なエラーを実行します SQL クエリ</span></span><span>
</span><span><span class="hljs-variable">$query</span></span><span> = </span><span><span class="hljs-string">"SELECT * FROM non_existing_table"</span></span><span>;
</span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-variable">$mysqli</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">query</span></span><span>(</span><span><span class="hljs-variable">$query</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-keyword">echo</span></span><span> </span><span><span class="hljs-string">"エラーメッセージ: "</span></span><span> . </span><span><span class="hljs-variable">$mysqli</span></span><span>-&gt;error;
}
</span><span><span class="hljs-meta">?&gt;</span></span><span>
</span></span>

上記のコードでは、存在しないテーブルをクエリする場合、 $ mysqli->エラーは「table 'test_db.non_existing_table' not of "などのmysqlエラーメッセージを返します。

2。ERROR_LOG ()を使用してエラーをログにしてファイルをログにします

ERROR_LOG()関数は、ログファイルにエラー情報を書き込むか、指定されたエラーログハンドラーに送信するためにPHPが提供する非常に便利なツールです。 mysqli :: $ errorerror_log()を組み合わせることにより、将来のトラブルシューティングと分析のためにデータベースエラーをログファイルに記録できます。

error_log()関数の基本的な使用法は次のとおりです。

 <span><span><span class="hljs-title function_ invoke__">error_log</span></span><span>(</span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$message</span></span><span>, </span><span><span class="hljs-keyword">int</span></span><span> </span><span><span class="hljs-variable">$message_type</span></span><span> = </span><span><span class="hljs-number">0</span></span><span>, </span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$destination</span></span><span> = ?, </span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$extra_headers</span></span><span> = ?)
</span></span>
  • $メッセージ:記録するエラーメッセージ。

  • $ message_type :エラーログタイプ。 0はPHPに記録されたエラーログファイルを示し、1は電子メールの送信を示し、2はファイルの送信を示します。

  • $宛先$ message_typeが1または2の場合、受信メールへのアドレスまたはログファイルパスを指定します。

これは、mysqli :: $エラーのログファイルへのエラー情報を書き込む方法を示す例を示します。

 <span><span><span class="hljs-meta">&lt;?php</span></span><span>
</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">"root"</span></span><span>, </span><span><span class="hljs-string">"password"</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-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$mysqli</span></span><span>-&gt;connect_error) {
    </span><span><span class="hljs-keyword">die</span></span><span>(</span><span><span class="hljs-string">"接続に失敗しました: "</span></span><span> . </span><span><span class="hljs-variable">$mysqli</span></span><span>-&gt;connect_error);
}

</span><span><span class="hljs-comment">// 意図的なエラーを実行します SQL クエリ</span></span><span>
</span><span><span class="hljs-variable">$query</span></span><span> = </span><span><span class="hljs-string">"SELECT * FROM non_existing_table"</span></span><span>;
</span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-variable">$mysqli</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">query</span></span><span>(</span><span><span class="hljs-variable">$query</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-variable">$error_message</span></span><span> = </span><span><span class="hljs-string">"MySQL 間違い: "</span></span><span> . </span><span><span class="hljs-variable">$mysqli</span></span><span>-&gt;error . </span><span><span class="hljs-string">" | クエリ: "</span></span><span> . </span><span><span class="hljs-variable">$query</span></span><span>;
    </span><span><span class="hljs-title function_ invoke__">error_log</span></span><span>(</span><span><span class="hljs-variable">$error_message</span></span><span>, </span><span><span class="hljs-number">3</span></span><span>, </span><span><span class="hljs-string">"/var/log/php_error.log"</span></span><span>);
}
</span><span><span class="hljs-meta">?&gt;</span></span><span>
</span></span>

このコードでは、SQLクエリエラーが発生すると、 mysqli :: $エラーのエラーメッセージが/var/log/php_error.logファイルにSQLクエリステートメントとともに記録されます。 error_log()の最初のパラメーターはエラーメッセージであり、2番目のパラメーターは3に設定されており、エラーが指定されたログファイルに書き込まれていることを示します。

3。ログファイルの権限

PHPがログファイルにエラーを書き込むことができるようにするには、ログファイルに適切な書き込みアクセス許可が必要です。 Linuxを例にとると、ログファイル自体のディレクトリとファイルがPHPプロセスに書き込み可能であることを確認してください。

 <span><span>sudo </span><span><span class="hljs-built_in">chmod</span></span><span> 777 /var/log/php_error.log
</span></span>

または、グローバルな書き込み可能な権限を設定したくない場合は、ファイルが属するユーザーとユーザーグループを調整することにより、PHPプロセスの書き込み許可を与えることもできます。

 <span><span>sudo </span><span><span class="hljs-built_in">chown</span></span><span> www-data:www-data /var/log/php_error.log
</span></span>

4。ロギングを最適化します

ログファイルへのログエラーのログは非常に便利ですが、ログの記録方法をさらに最適化することをお勧めします。ここにいくつかの最適化の提案があります:

4.1。タイムスタンプを追加します

エラーログにタイムスタンプを追加すると、エラーが発生したときに追跡しやすくなります。

 <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-variable">$error_message</span></span><span> = </span><span><span class="hljs-string">"["</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-string">"] MySQL 間違い: "</span></span><span> . </span><span><span class="hljs-variable">$mysqli</span></span><span>-&gt;error . </span><span><span class="hljs-string">" | クエリ: "</span></span><span> . </span><span><span class="hljs-variable">$query</span></span><span>;
    </span><span><span class="hljs-title function_ invoke__">error_log</span></span><span>(</span><span><span class="hljs-variable">$error_message</span></span><span>, </span><span><span class="hljs-number">3</span></span><span>, </span><span><span class="hljs-string">"/var/log/php_error.log"</span></span><span>);
}
</span></span>

4.2。クライアントIPとユーザー情報を記録します

アプリケーションがマルチユーザーシステムの場合、クライアントのIPアドレスを記録し、現在のユーザーのIDを録音することは、問題の配置に非常に役立ちます。

 <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-variable">$error_message</span></span><span> = </span><span><span class="hljs-string">"["</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-string">"] IP: "</span></span><span> . </span><span><span class="hljs-variable">$_SERVER</span></span><span>[</span><span><span class="hljs-string">'REMOTE_ADDR'</span></span><span>] . </span><span><span class="hljs-string">" ユーザーID: "</span></span><span> . </span><span><span class="hljs-variable">$_SESSION</span></span><span>[</span><span><span class="hljs-string">'user_id'</span></span><span>] . </span><span><span class="hljs-string">" MySQL 間違い: "</span></span><span> . </span><span><span class="hljs-variable">$mysqli</span></span><span>-&gt;error . </span><span><span class="hljs-string">" | クエリ: "</span></span><span> . </span><span><span class="hljs-variable">$query</span></span><span>;
    </span><span><span class="hljs-title function_ invoke__">error_log</span></span><span>(</span><span><span class="hljs-variable">$error_message</span></span><span>, </span><span><span class="hljs-number">3</span></span><span>, </span><span><span class="hljs-string">"/var/log/php_error.log"</span></span><span>);
}
</span></span>

4.3。エラーログを制限します

ログファイルが非常に大きくなった場合は、特定のタイプのエラーのみをログするか、ログファイルを管理するためにログロテートなどのログ回転ツールを使用することを検討してください。

要約します

mysqli :: $ errorerror_log()を組み合わせることにより、データベースエラーを効率的にログにしてファイルを記録できます。これは、開発プロセス中に問題を迅速に見つけるのに役立つだけでなく、開発者が生産環境でタイムリーに潜在的なデータベースエラーを検出するのにも役立ちます。タイムスタンプ、ユーザー情報、クライアントIPを合理的に使用することにより、ログのトレーサビリティと実用性をさらに改善できます。

セキュリティリスクを回避するために、生産環境に展開するときにエラーログファイルの権限が適切に設定されていることを確認してください。