'How to make mysqli throw exceptions using MYSQLI_REPORT_STRICT? [duplicate]

There is a function in mysqli, called mysqli_report(), which looks like a counterpart for PDO's setAttribute() method with its ERRMODE_* constants. The manual says:

MYSQLI_REPORT_STRICT Throw mysqli_sql_exception for errors instead of warnings

So, having PDO::ERRMODE_EXCEPTION in mind, i tried this code

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

but, to my disappointment, it produced no exception nor warning at all.

So, here goes the question: is there a way to tell mysqli to throw exceptions without using MYSQLI_REPORT_ALL?



Solution 1:[1]

That's not a bug, that's a feature. ;)

PHP does not report mysqli or PDO errors by default because that information is highly sensitive, displaying it to a user is a great way to learn how to inject malicious data.

MYSQLI_REPORT_ERROR tells it to turn on the errors and MYSQLI_REPORT_STRICT tells it to convert those errors into Exceptions. This will give you a full report of the error message, so if you do this in production make sure that you do not display it to the end user.

Using the Pipe symbol | allows you to set multiple constants in most of PHPs methods and functions. PDO, mysqli, filter_var, etc. all use the pipe to set multiple optional arguments of the same type, or a "bitwise disjunction of flags" to use the fancy term for it. The lazy person's array argument.

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1