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
?
For some reason people tend do use this post as a dupe target for the questions related to error reporting with mysqli. This answer never has been intended for the purpose.
Here is the correct answer in case you were directed here: What to do if your mysqli interaction failed
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With