Как заставить mysqli исключать исключения с помощью MYSQLI_REPORT_STRICT?

В mysqli есть функция mysqli_report() , которая выглядит как аналог метода setAttribute() PDO с его константами ERRMODE_* . В руководстве написано :

MYSQLI_REPORT_STRICT Throw mysqli_sql_exception for errors instead of warnings

Итак, имея в виду PDO::ERRMODE_EXCEPTION , я пробовал этот код

 mysqli_report(MYSQLI_REPORT_STRICT); $mysqli->query("foo"); 

но, к моему разочарованию, он не вызывал никаких исключений и предупреждений вообще.

Итак, возникает вопрос: есть ли способ сказать mysqli для исключения исключений без использования MYSQLI_REPORT_ALL ?

После некоторых исследований я, наконец, узнал, что параметр функции является битовой маской, и нужно объединить несколько значений, чтобы получить желаемый результат. Окончательная комбинация не слишком логична, но она работает по назначению, вызывая исключение при ошибке запроса при игнорировании предупреждений.

 mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT); 

приведет к желаемому результату:

Неустранимая ошибка: исключение «mysqli_sql_exception» с сообщением «У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования рядом с 'foo' в строке 1 '

Это не ошибка, это особенность. 😉

PHP не сообщает о ошибках mysqli или PDO по умолчанию, потому что эта информация очень чувствительна, отображение ее пользователю – отличный способ узнать, как вводить вредоносные данные.

MYSQLI_REPORT_ERROR сообщает об этом, чтобы включить ошибки, и MYSQLI_REPORT_STRICT сообщает, что он преобразует эти ошибки в Исключения. Это даст вам полный отчет об ошибке, поэтому никогда не делайте этого в производственных средах.

Использование символа трубы | позволяет устанавливать несколько констант в большинстве методов и функций PHP. PDO, mysqli, filter_var и т. Д. Все используют канал для установки нескольких необязательных аргументов одного и того же типа или «поразрядной дизъюнкции флагов», чтобы использовать для этого причудливый термин. Аргумент массива ленивого.