Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

Tags:

exception

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?

like image 558
Your Common Sense Avatar asked Aug 27 '13 05:08

Your Common Sense


2 Answers

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

like image 72
Your Common Sense Avatar answered Sep 19 '22 13:09

Your Common Sense


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.

like image 28
Michael Ryan Soileau Avatar answered Sep 19 '22 13:09

Michael Ryan Soileau