mysqli :: get_warningsは、最近実行されたSQLステートメントによって生成された警告情報を取得するために、PHPのMySQLI拡張によって提供される方法です。 MySqli_Warningオブジェクトのチェーンを返し、それぞれにエラーコードや警告メッセージなどの警告の詳細が含まれています。
これらの警告を通過することにより、開発者は明示的にスローされていないが、データの正しさに影響を与える可能性のある詳細をキャプチャできます。
SQLクエリを実行した後、 get_warningsを呼び出して警告があるかどうかを確認します。
警告チェーンを通過し、警告情報を収集します。
警告情報は、その後の分析の利便性のために出力またはリアルタイムで保存されます。
ログシステムまたはフロントエンドディスプレイと組み合わせて、視覚監視ツールを形成できます。
次の例は、SQLステートメントを実行し、 mysqli :: get_warningsを介して警告情報を取得し、デバッグログに出力する方法を示しています。
<?php
$mysqli = new mysqli("gitbox.net", "username", "password", "database");
if ($mysqli->connect_error) {
die("接続に失敗しました: " . $mysqli->connect_error);
}
// 例 SQL:重複したプライマリキーを挿入すると、警告が生成される場合があります
$sql = "INSERT INTO test_table (id, name) VALUES (1, 'Alice')";
// クエリを実行します
if ($mysqli->query($sql) === TRUE) {
echo "クエリの実行に正常に\n";
// 警告を受けてください
if ($warnings = $mysqli->get_warnings()) {
do {
echo "警告コード: " . $warnings->errno . "\n";
echo "警告メッセージ: " . $warnings->message . "\n";
} while ($warnings = $warnings->next());
} else {
echo "警告なし\n";
}
} else {
echo "クエリの実行に失敗しました: " . $mysqli->error . "\n";
}
$mysqli->close();
?>
警告情報を持続するために、ファイルに警告を書くことができます。
function logWarnings($mysqli) {
if ($warnings = $mysqli->get_warnings()) {
$logFile = 'db_warnings.log';
do {
$log = date('Y-m-d H:i:s') . " - Warning {$warnings->errno}: {$warnings->message}\n";
file_put_contents($logFile, $log, FILE_APPEND);
} while ($warnings = $warnings->next());
}
}
自動記録は、各データベース操作の後にlogwarnings($ mysqli)を呼び出すことで実現できます。
AJAXを介してPHPスクリプトを呼び出すと、最新の警告が返されます。フロントエンドページでは、警告リストをリアルタイムで更新できるため、開発者が表示されやすくなります。
警告は最新のデータベース操作にのみ関連し、新しいステートメントが実行された後、古い警告が上書きされます。
mysqli :: get_warningsは、mysqlサーバーが警告メカニズムをサポートしている場合にのみ有効です。
頻繁なクエリと記録警告は、パフォーマンスに特定の影響を与える可能性があります。環境または例外監視をデバッグするときにのみ有効にすることをお勧めします。
PHPのmysqli :: get_warnings関数を使用すると、データベース操作で警告情報を効果的に取得できます。ロギングとリアルタイムのプレゼンテーションテクノロジーを組み合わせることで、シンプルなデータベース警告監視ツールを構築して、開発者がタイムリーに潜在的な問題を発見し、データベースアクセスとアプリケーションのパフォーマンスを最適化するのに役立ちます。