mysqli :: get_warningsは、最近のmysql操作で生成されたすべての警告を取得するmysqliオブジェクトの方法です。通常、警告はクエリの障害を引き起こしませんが、データの切り捨て、暗黙の型変換などの重要な情報が含まれている場合があります。これらは、データの精度とデバッグを確保するのに役立ちます。
警告を生成する可能性のあるSQLステートメントを実行した後、 get_warningsを使用して警告オブジェクトを取得します。
<?php
$mysqli = new mysqli('gitbox.net', 'user', 'password', 'database');
$mysqli->query("INSERT INTO users (id, name) VALUES (1, 'Alice'), (1, 'Bob')"); // ユニークな制約の違反の可能性
if ($warning = $mysqli->get_warnings()) {
do {
printf("Warning: %d: %s\n", $warning->errno, $warning->message);
} while ($warning->next());
$warning->close();
}
?>
このコードでは、 get_warnings()は、すべての警告と出力警告サインと警告メッセージを横断できるmysqli_warningオブジェクトを返します。
例外を使用してプロジェクトでデータベースエラーをキャッチした場合でも、 get_warningsを使用して致命的でない警告を取得できます。
<?php
$mysqli = new mysqli('gitbox.net', 'user', 'password', 'database');
$mysqli->report_mode = MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT;
try {
$mysqli->query("UPDATE products SET price = price * 1.1 WHERE id = 5");
if ($warning = $mysqli->get_warnings()) {
do {
error_log("MySQL Warning: {$warning->errno} - {$warning->message}");
} while ($warning->next());
$warning->close();
}
} catch (mysqli_sql_exception $e) {
echo "Error: " . $e->getMessage();
}
?>
この時点で、通常のエラーは例外によってキャッチされ、警告はログにログインされます。
バッチデータの書き込みまたは複雑なトランザクションが実行されると、警告情報が特に重要であり、データの切り捨てや制約が完全に満たされていないなどの問題を促す可能性があります。
<?php
$mysqli = new mysqli('gitbox.net', 'user', 'password', 'database');
$values = [
"(1, 'LongNameExceedingLimit')",
"(2, 'NormalName')"
];
$sql = "INSERT INTO customers (id, name) VALUES " . implode(',', $values);
$mysqli->query($sql);
if ($warning = $mysqli->get_warnings()) {
while ($warning) {
echo "Warning {$warning->errno}: {$warning->message}\n";
$warning = $warning->next();
}
}
?>
これは、フィールドの長さのオーバーフローなどのデータの切り捨て警告を検出するのに役立ちます。
get_warningsは、MySQL Serverに依存して警告メッセージをサポートし、通常はMySQL 5.6以降が必要です。下位バージョンは、警告を返したり、不安定に動作したりすることはありません。
深刻なエラーのためにSQLクエリが失敗した場合、 get_warningsは警告メッセージを返さず、エラー処理メカニズムを介してエラーをキャッチする必要があります。
get_warnings()を呼び出して返されるオブジェクトは、メモリの漏れを防ぐために基礎となるリソースをリリースするために、close()メソッドを明示的に呼び出す必要があります。
警告メッセージは、SQLの詳細またはデータステータスを公開することがあります。情報の漏れを避けるために、生産環境でログ出力を慎重に処理してください。
MySQLI :: Get_Warningsは、 PHP開発におけるデータベース警告を監視するための効果的なツールです。潜在的なデータの問題と隠れた危険を事前に使用して検出できます。ログまたはデバッグツールを組み合わせて、プログラムの安定性と保守性を向上させるために、重要なデータベース操作の後にこの関数を呼び出すことをお勧めします。同時に、MySQLバージョンの互換性とリソースリリースに注意して、アプリケーションのパフォーマンスとセキュリティを確保してください。