CakeFest 2024: The Official CakePHP Conference

mysqli_driver::$report_mode

mysqli_report

(PHP 5, PHP 7, PHP 8)

mysqli_driver::$report_mode -- mysqli_reportmysqli のエラー報告モードを設定する

説明

オブジェクト指向型

手続き型

フラグに応じて、mysqli のエラー報告モードを設定します。 例外をスローするモードや、警告を発生させるモード、エラーを報告しないモードを設定できます。 MYSQLI_REPORT_ALLMYSQLI_REPORT_INDEX に設定すると、 インデックスを使わない(または、インデックスの使い方が良くない) クエリも報告します。

PHP 8.1.0 以降では、デフォルトの設定は MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT です。 それより前のバージョンでは、MYSQLI_REPORT_OFF でした。

パラメータ

flags

サポートするフラグ
名前 説明
MYSQLI_REPORT_OFF レポートをオフにする
MYSQLI_REPORT_ERROR mysqli の関数呼び出しからのエラーを報告する
MYSQLI_REPORT_STRICT 警告の代わりに mysqli_sql_exception をスローする
MYSQLI_REPORT_INDEX クエリでインデックスを使っていない (あるいは不適切なインデックスを使っている) 場合にレポートする
MYSQLI_REPORT_ALL すべてのオプションを設定する (すべてレポートする)

戻り値

true を返します。

変更履歴

バージョン 説明
8.1.0 デフォルト値が MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT になりました。 これより前のバージョンでは、 MYSQLI_REPORT_OFF でした。

例1 オブジェクト指向型

<?php

/* レポートを有効にします。 */
$driver = new mysqli_driver();
$driver->report_mode = MYSQLI_REPORT_ALL;

try {
/* 接続が失敗すると, mysqli_sql_exception がスローされます。*/
$mysqli = new mysqli("localhost", "my_user", "my_password", "my_db");

/* このクエリは、エラーを報告するはずです。 */
$result = $mysqli->query("SELECT Name FROM Nonexistingtable WHERE population > 50000");

/* このクエリは、カラムがインデックスを持っていた場合、エラーを報告するはずです。*/
$result = $mysqli->query("SELECT Name FROM City WHERE population > 50000");
} catch (
mysqli_sql_exception $e) {
error_log($e->__toString());
}

例2 手続き型

<?php

/* activate reporting */
mysqli_report(MYSQLI_REPORT_ALL);

try {
/* 接続が失敗すると, mysqli_sql_exception がスローされます。*/
$link = mysqli_connect("localhost", "my_user", "my_password", "my_db");

/* このクエリは、エラーを報告するはずです。 */
$result = mysqli_query($link, "SELECT Name FROM Nonexistingtable WHERE population > 50000");

/* このクエリは、カラムがインデックスを持っていた場合、エラーを報告するはずです。*/
$result = mysqli_query($link, "SELECT Name FROM City WHERE population > 50000");
} catch (
mysqli_sql_exception $e) {
error_log($e->__toString());
}

例3 インデックスに関するエラー以外を全て報告する

<?php

/* activate reporting */
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

try {
/* 接続が失敗すると, mysqli_sql_exception がスローされます。*/
$mysqli = new mysqli("localhost", "my_user", "my_password", "my_db");
$mysqli = new mysqli("localhost", "my_user", "my_password", "my_db");

/* このクエリは、エラーを報告するはずです。 */
$result = $mysqli->query("SELECT Name FROM Nonexistingtable WHERE population > 50000");

/* このクエリは、インデックスが使えなかったとしても、一切エラーを報告しません */
$result = $mysqli->query("SELECT Name FROM City WHERE population > 50000");
} catch (
mysqli_sql_exception $e) {
error_log($e->__toString());
}

参考

add a note

User Contributed Notes 2 notes

up
6
nineoclick (atsymbol) gmail (dot) com
6 years ago
Seems not clear but flags *could be combined*, as per other flags.
For example:

<?php

# wannabe noticed about all errors except those about indexes
$driver = new mysqli_driver();
$driver->report_mode = MYSQLI_REPORT_ALL & ~MYSQLI_REPORT_INDEX;

?>
up
-3
welfordmartin at gmail dot com
3 years ago
As a recommendaton on memory management please don't use the objective way your creating an object to specify one property and thats all your doing with it, much more effective both for the parser and for memory to use the proccedual style for setting the report flag.
To Top