mysqli_driver::$report_mode

mysqli_report

(PHP 5, PHP 7, PHP 8)

mysqli_driver::$report_mode -- mysqli_report β€” УстанавливаСт Ρ€Π΅ΠΆΠΈΠΌ сообщСний ΠΎΠ± ΠΎΡˆΠΈΠ±ΠΊΠ°Ρ… ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΌ mysqli

ОписаниС

ΠžΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΡΡ‚ΠΈΠ»ΡŒ

ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π½Ρ‹ΠΉ ΡΡ‚ΠΈΠ»ΡŒ

function mysqli_report(int $flags): true

Π’ зависимости ΠΎΡ‚ Ρ„Π»Π°Π³ΠΎΠ² функция устанавливаСт Π² ΠΌΠΎΠ΄ΡƒΠ»Π΅ mysqli Ρ€Π΅ΠΆΠΈΠΌ сообщСний ΠΎΠ± ΠΎΡˆΠΈΠ±ΠΊΠ°Ρ… Π½Π° ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ, прСдупрСТдСния ΠΈΠ»ΠΈ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ сообщСния ΠΎΠ± ΠΎΡˆΠΈΠ±ΠΊΠ°Ρ…. Π‘ΠΎ значСниями MYSQLI_REPORT_ALL ΠΈΠ»ΠΈ MYSQLI_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");

/* Π­Ρ‚ΠΎΡ‚ запрос сообщит ΠΎ Π½Π΅Π²Π΅Ρ€Π½ΠΎΠΌ индСксС, Ссли для столбца population Π½Π΅ создали индСкс */
$result = $mysqli->query("SELECT Name FROM City WHERE population > 50000");
} catch (
mysqli_sql_exception $e) {
error_log($e->__toString());
}

?>

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ #2 ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π½Ρ‹ΠΉ ΡΡ‚ΠΈΠ»ΡŒ

<?php

/* Π’ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌ сообщСния ΠΎΠ± ΠΎΡˆΠΈΠ±ΠΊΠ°Ρ… */
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");

/* Π­Ρ‚ΠΎΡ‚ запрос сообщит ΠΎ Π½Π΅Π²Π΅Ρ€Π½ΠΎΠΌ индСксС, Ссли для столбца population Π½Π΅ создали индСкс */
$result = mysqli_query($link, "SELECT Name FROM City WHERE population > 50000");
} catch (
mysqli_sql_exception $e) {
error_log($e->__toString());
}

?>

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ #3 ΠžΡ‚Ρ‡Ρ‘Ρ‚ ΠΎΠ± ΠΎΡˆΠΈΠ±ΠΊΠ°Ρ…, ΠΊΡ€ΠΎΠΌΠ΅ ошибок Π½Π΅Π²Π΅Ρ€Π½ΠΎΠ³ΠΎ индСкса

<?php

/* Π’ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌ сообщСния ΠΎΠ± ΠΎΡˆΠΈΠ±ΠΊΠ°Ρ… */
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

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());
}

?>

Π‘ΠΌΠΎΡ‚Ρ€ΠΈΡ‚Π΅ Ρ‚Π°ΠΊΠΆΠ΅

  • mysqli_sql_exception
  • set_exception_handler() - УстанавливаСт ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ
  • error_reporting() - ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅Ρ‚, ΠΎ ΠΊΠ°ΠΊΠΈΡ… PHP-ΠΎΡˆΠΈΠ±ΠΊΠ°Ρ… ΡΠΎΠΎΠ±Ρ‰Π°Ρ‚ΡŒ
οΌ‹Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΡ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ 2 notes

up
6
nineoclick (atsymbol) gmail (dot) com ΒΆ
8 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
-1
theking2 at king dot ma ΒΆ
1 year ago
Example #1 will now report a depricated warning:

"The mysqli_driver class is an instance of the monostate pattern, i.e. there is only one driver which can be accessed though an arbitrary amount of mysqli_driver instances."

To set the error mode of the mysql driver do use 

<?php
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
?>