2013-08-27 16 views
5

ERRMODE_*定数を持つPDOのsetAttribute()メソッドに対応するように見えるmysqli_report()と呼ばれる関数がmysqliにあります。マニュアルsays:だからMYSQLI_REPORT_STRICTを使用してmysqli例外をスローする方法は?

MYSQLI_REPORT_STRICTThrow mysqli_sql_exception for errors instead of warnings

PDO::ERRMODE_EXCEPTION念頭に置いたが、私はこのコード

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

を試みたが、私の失望に、それはまったくの例外や警告を生成しませんでした。

ここに質問があります:MYSQLI_REPORT_ALLを使わずに例外をスローするようにmysqliに指示する方法はありますか?

答えて

11

いくつかの研究の後、私は最終的に関数のパラメータがビットマスクであり、所望の結果を得るためにいくつかの値を組み合わせなければならないことを知りました。最後の組み合わせはあまり論理的ではありませんが、意図したとおりに動作し、警告を無視しながらクエリエラーで例外をスローします。

バグがありません

Fatal error: Uncaught exception 'mysqli_sql_exception' with message 'You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'foo' at line 1'

+0

「PHPのバグ」とは何か、有益な情報は含まれていないようですか? – MrWhite

9

、それは機能です:

mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT); 

は、所望の結果を生成します。 ;)

PHPはデフォルトでmysqliやPDOのエラーを報告しません。その情報は非常に機密性が高いため、ユーザーに表示することは悪意のあるデータを挿入する方法を学ぶ上で有効です。

MYSQLI_REPORT_ERRORは、エラーをオンにするように指示し、MYSQLI_REPORT_STRICTは、エラーを例外に変換するように指示します。これにより、エラーメッセージの完全なレポートが表示されるため、本番環境ではこれを実行しないでください。

パイプシンボルの使用|ほとんどのPHPメソッドと関数で複数の定数を設定できます。 PDO、mysqli、filter_varなどはすべてパイプを使用して同じ型の複数のオプションの引数を設定します。または、フラグのビット単位の論理和を使用して空白の用語を使用します。怠惰な人の配列引数。

関連する問題