MySQLデータベース操作にPHPを使用する場合、開発者は通常、返された行数や実行が成功したかどうかなど、クエリの結果自体にもっと注意を払い、有用なデバッグツールを無視するのは簡単です。いくつかのタイプのSQLステートメントが実行された後、このプロパティは実行結果に関するより多くの統計を返すことができ、クエリの影響をより包括的に理解するのに役立ちます。
MySQLI :: $ INFOは、 MySQLIクラスの読み取り専用プロパティであり、最後に実行されたSQLステートメントの統計情報を提供するために使用され、挿入、更新、ロードデータなどの修正されたステートメントに特に適しています。
このプロパティの返品値は文字列であり、コンテンツ形式は固定されていませんが、通常、影響を受ける行の数、繰り返し行の数、警告行の数、その他の情報などの情報が含まれています。例えば:
$mysqli = new mysqli("localhost", "user", "password", "database");
$mysqli->query("UPDATE users SET status = 'active' WHERE last_login > NOW() - INTERVAL 30 DAY");
echo $mysqli->info;
次の情報が出力される場合があります。
Rows matched: 15 Changed: 15 Warnings: 0
これにより、合計15のレコードが一致し、15のレコードが変更され、警告が発生しなかったことがわかります。
mysqli :: $ infoはフォーマットされた文字列を返します。以下は一般的な返品キーワードです。
レコード:処理されたレコードの数(主にロードデータで使用されています)
重複:重複レコードの数(挿入に一般的...重複するキーアップデートで)
警告:実行中に表示される警告の数
一致する行:一致する行数(通常は更新または削除に使用されます)
変更:実際に変更される行の数(フィールド値が実際に変更されたことを示します)
例えば:
$mysqli->query("INSERT INTO logs (event, created_at) VALUES ('login', NOW()), ('logout', NOW())");
echo $mysqli->info;
出力は次のとおりです。
Records: 2 Duplicates: 0 Warnings: 0
これは、2つのレコードが挿入されており、複製も警告もないことを示しています。
mysqli :: $ infoとロギングシステムを組み合わせることにより、データベース操作の影響に関する詳細な分析を実施できます。例えば:
$mysqli->query("UPDATE products SET stock = stock - 1 WHERE id = 101");
$log = sprintf("Query info: %s", $mysqli->info);
file_put_contents("/var/log/db_ops.log", $log . PHP_EOL, FILE_APPEND);
このようにして、在庫が更新されるたびに影響を受ける行の数を記録できます。これは、後退後のパフォーマンスの最適化に役立ちます。
サポートされているステートメントの後にのみ理にかなっています。選択クエリは通常、空の文字列を返します。
エラー処理メカニズムに置き換えることはできません。エラーレポートツールではなく、実行の影響に関する補足情報です。
マルチステートメントを実行する場合、最後のステートメントのみが反映されます。マルチステートメントクエリを使用する場合、最後のステートメントの実行のみを反映することができます。
言語バージョンの違い:出力文字列の構造は、MySQLバージョンとPHPバージョンの間でわずかに異なる場合があります。
MySQLI :: $ INFOは、非クエリSQLステートメントを実行するときに詳細な統計を提供するシンプルだが実用的なデバッグツールです。デバッグ、ロギング、クエリの最適化のための重要な参照データを提供します。データの変更に非常にパフォーマンスが高い、または敏感なアプリケーションでは、合理的に使用すると、システムの観察性が大幅に向上する可能性があります。
このプロパティに関する公式文書については、 https://gitbox.net/php/mysqli.infoを参照してください。