27

MySQLi クエリ エラーを例外に変換しようとしていますが、できませんでした。mysqli_sql_exceptionは、DB への接続に失敗した場合にのみスローされます。

mysqli_report(MYSQLI_REPORT_STRICT)カスタムラッパークラスに埋め込まれた手続き型のMySQLi関数を使用しました。

以前のコード:

public function mysqlQuery($SQL) {

    $this->Result = mysqli_query($this->DBlink, $SQL);

    if($this->Result === false)
        throw new MySQLiQueryException($SQL, mysqli_error($this->DBlink), mysqli_errno($this->DBlink));

    return $this->Result;

}

質問:クエリが失敗したときに警告も例外もスローされないのは正常なので、mysqli_query() が false を返したかどうかを確認する必要がありますか?

4

3 に答える 3

35

少し前に、私はこの問題を解決することができました。他の回答で指摘されたように、

mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

例外をスローするように mysqli に指示する正しい方法です。

すべてのクエリを try-catch でラップしないようにしてください。これは、例外を使い始めたらすぐに、左右に試行とキャッチをスローし始める必要があるという、非常によくある誤解です。逆に、try-catch は慎重に使用する必要があります。エラーの 99% はその場で処理するのではなく、サイト全体のエラー ハンドラーで処理する必要があります。PHP エラー報告に関する私の記事からトピックの詳細を読むことができます

于 2013-01-29T08:37:08.263 に答える