現在の位置: ホーム> 最新記事一覧> mysqli :: debug and error_logと組み合わせて詳細なデバッグ情報を出力する方法は?

mysqli :: debug and error_logと組み合わせて詳細なデバッグ情報を出力する方法は?

gitbox 2025-09-15

mysqli :: debug and error_logと組み合わせて詳細なデバッグ情報を出力する方法は?

PHPプロジェクトを開発する場合、データベース操作は多くの場合、エラーが発生しやすくなります。問題を迅速に見つけるために、詳細なデバッグ情報は不可欠です。 PHPのMySQLI拡張機能は、いくつかの便利なデバッグ機能、特にMySQLI :: Debugメソッドを提供します。これは、開発者がMySQLデバッグ情報を取得するのに役立ちます。一方、 ERROR_LOG関数は、ファイル、システムログ、または電子メールに送信するエラーログを書き込むための強力なツールです。これら2つを組み合わせることで、開発者はより包括的で直感的なデータベースデバッグログ出力を実現できます。

1。Mysqli :: Debugの紹介

mysqli :: debugは、 mysqlデータベースの基礎となるデバッグ情報を出力できるMysqliクラスのメソッドです。この方法を使用することにより、開発者は実行されたSQLクエリ、接続情報、およびMySQLサーバーのステータスを表示できます。これは、SQLクエリの実行をデバッグするのに非常に役立ちます。

MySqli :: Debugを使用するのは非常にシンプルで、適切な場所で呼び出すだけです。使用の簡単な例は次のとおりです。

 <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">"username"</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-variable">$mysqli</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">debug</span></span><span>(</span><span><span class="hljs-string">"d:t"</span></span><span>); </span><span><span class="hljs-comment">// 'd' デバッグ情報を示します,'t' 追跡情報を示します</span></span><span>

</span><span><span class="hljs-comment">// 埋め込む SQL クエリ</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-string">"SELECT * FROM users"</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-keyword">while</span></span><span> (</span><span><span class="hljs-variable">$row</span></span><span> = </span><span><span class="hljs-variable">$result</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">fetch_assoc</span></span><span>()) {
        </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"User: "</span></span><span> . </span><span><span class="hljs-variable">$row</span></span><span>[</span><span><span class="hljs-string">'name'</span></span><span>] . </span><span><span class="hljs-string">"&lt;br&gt;"</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-string">"Query failed: "</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-> debug( "d:t")がデバッグ情報出力を有効にします。この情報は、開発者がMySQLクエリの実行の詳細を理解できるように、ブラウザまたは端末に直接出力されます。

2。ERROR_LOGの紹介

ERROR_LOGは、PHPの組み込み関数であり、システムログにエラーメッセージを送信したり、ファイルを指定したり、管理者に郵送したりできます。この機能は非常に便利です。これは、開発者がエラー情報を記録し、必要に応じてログを保存する場所を指定するのに役立ちます。

基本的なerror_logは次のように使用されます。

 <span><span><span class="hljs-meta">&lt;?php</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">"Database query failed: "</span></span><span> . </span><span><span class="hljs-variable">$mysqli</span></span><span>-&gt;error, </span><span><span class="hljs-number">3</span></span><span>, </span><span><span class="hljs-string">"/path/to/your/logfile.log"</span></span><span>);
</span><span><span class="hljs-meta">?&gt;</span></span><span>
</span></span>

この例では、 ERROR_LOGは、指定されたログファイルにエラーメッセージを追加します。

3. mysqli :: debug and error_logを組み合わせて使用​​します

MySqli :: Debugは詳細なデータベースデバッグ情報を出力できますが、特に実稼働環境では、この情報をブラウザに直接出力することが常に理想的ではない場合があります。したがって、後続の分析のためにストレージのためにこの情報を同時にログファイルに出力する方が良い慣行です。

mysqli :: debug and error_logを組み合わせて、より柔軟なデバッグ出力を実現できます。これが実用的な例です。

 <span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-comment">// デバッグ出力をログファイルに設定します</span></span><span>
</span><span><span class="hljs-variable">$logFile</span></span><span> = </span><span><span class="hljs-string">'/path/to/your/logfile.log'</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">"username"</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-variable">$mysqli</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">debug</span></span><span>(</span><span><span class="hljs-string">"d:t"</span></span><span>);

</span><span><span class="hljs-comment">// デバッグ情報を記録してファイルを記録します</span></span><span>
</span><span><span class="hljs-title function_ invoke__">ob_start</span></span><span>(); </span><span><span class="hljs-comment">// 出力バッファリングをオンにします</span></span><span>
</span><span><span class="hljs-variable">$mysqli</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">debug</span></span><span>(</span><span><span class="hljs-string">"d:t"</span></span><span>);
</span><span><span class="hljs-variable">$debugOutput</span></span><span> = </span><span><span class="hljs-title function_ invoke__">ob_get_clean</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">empty</span></span><span>(</span><span><span class="hljs-variable">$debugOutput</span></span><span>)) {
    </span><span><span class="hljs-title function_ invoke__">error_log</span></span><span>(</span><span><span class="hljs-string">"MySQL Debug Output: "</span></span><span> . </span><span><span class="hljs-variable">$debugOutput</span></span><span>, </span><span><span class="hljs-number">3</span></span><span>, </span><span><span class="hljs-variable">$logFile</span></span><span>);
}

</span><span><span class="hljs-comment">// 埋め込む SQL クエリ</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-string">"SELECT * FROM users"</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-keyword">while</span></span><span> (</span><span><span class="hljs-variable">$row</span></span><span> = </span><span><span class="hljs-variable">$result</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">fetch_assoc</span></span><span>()) {
        </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"User: "</span></span><span> . </span><span><span class="hljs-variable">$row</span></span><span>[</span><span><span class="hljs-string">'name'</span></span><span>] . </span><span><span class="hljs-string">"&lt;br&gt;"</span></span><span>;
    }
} </span><span><span class="hljs-keyword">else</span></span><span> {
    </span><span><span class="hljs-variable">$errorMsg</span></span><span> = </span><span><span class="hljs-string">"Query failed: "</span></span><span> . </span><span><span class="hljs-variable">$mysqli</span></span><span>-&gt;error;
    </span><span><span class="hljs-comment">// 記録 SQL ログファイルへのエラーメッセージ</span></span><span>
    </span><span><span class="hljs-title function_ invoke__">error_log</span></span><span>(</span><span><span class="hljs-variable">$errorMsg</span></span><span>, </span><span><span class="hljs-number">3</span></span><span>, </span><span><span class="hljs-variable">$logFile</span></span><span>);
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$errorMsg</span></span><span>;
}
</span><span><span class="hljs-meta">?&gt;</span></span><span>
</span></span>

上記のコードでは、最初にmysqli :: debugを使用してデバッグ情報を有効にし、 ob_startob_get_cleanを使用してこの情報をキャプチャします。次に、デバッグ出力がERROR_LOGを介して指定されたログファイルにログインします。 SQLクエリが実行された後、クエリに障害が発生した場合、エラーメッセージも同じログファイルにログを記録します。

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

生産環境では、ログファイルで過剰なデバッグ情報がすぐに巨大になり、システムのパフォーマンスに影響を与える可能性があります。したがって、環境条件(開発環境や生産環境など)に応じてデバッグ出力を柔軟に調整できます。

たとえば、開発環境で詳細なデバッグ情報をオンにし、生産環境でオフにします。

 <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">"username"</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-title function_ invoke__">getenv</span></span><span>(</span><span><span class="hljs-string">'ENVIRONMENT'</span></span><span>) === </span><span><span class="hljs-string">'development'</span></span><span>) {
    </span><span><span class="hljs-variable">$mysqli</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">debug</span></span><span>(</span><span><span class="hljs-string">"d:t"</span></span><span>);
}

</span><span><span class="hljs-comment">// 埋め込む SQL クエリ</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-string">"SELECT * FROM users"</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-keyword">while</span></span><span> (</span><span><span class="hljs-variable">$row</span></span><span> = </span><span><span class="hljs-variable">$result</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">fetch_assoc</span></span><span>()) {
        </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"User: "</span></span><span> . </span><span><span class="hljs-variable">$row</span></span><span>[</span><span><span class="hljs-string">'name'</span></span><span>] . </span><span><span class="hljs-string">"&lt;br&gt;"</span></span><span>;
    }
} </span><span><span class="hljs-keyword">else</span></span><span> {
    </span><span><span class="hljs-variable">$errorMsg</span></span><span> = </span><span><span class="hljs-string">"Query failed: "</span></span><span> . </span><span><span class="hljs-variable">$mysqli</span></span><span>-&gt;error;
    </span><span><span class="hljs-title function_ invoke__">error_log</span></span><span>(</span><span><span class="hljs-variable">$errorMsg</span></span><span>, </span><span><span class="hljs-number">3</span></span><span>, </span><span><span class="hljs-string">"/path/to/your/logfile.log"</span></span><span>);
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$errorMsg</span></span><span>;
}
</span><span><span class="hljs-meta">?&gt;</span></span><span>
</span></span>

5。概要

MySqli :: debug and error_logを組み合わせることで、開発者はMySQLデータベースのデバッグ情報を効果的にキャプチャして記録し、それを出力してファイルをログに出力して、その後の分析と問題の位置を容易にします。開発環境では、情報をデバッグすると、開発者が問題を迅速に特定するのに役立ちますが、生産環境では、合理的な伐採はシステムの安定した動作を確保し、潜在的な問題を便利にバックトラックして解決することができます。