MySQLi でクエリエラーを例外に変換する
P粉060528326
P粉060528326 2023-08-24 11:53:00
0
2
435

MySQLi クエリ エラーを例外に変換しようとしていますが、それは不可能です。mysqli_sql_Exception 例外は、データベースへの接続が失敗した場合にのみスローされます。

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

前のコード:

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)); $this->結果を返す; }

質問: クエリが失敗しても警告や例外はスローされませんが、これは正常ですか?それで、mysqli_query() が false を返すかどうかを確認する必要がありますか?

P粉060528326
P粉060528326

全員に返信 (2)
P粉420958692

###いいえ。###

要件に従い、SQL エラーで例外をスローするように mysqli ドライバーに指示できるはずですが、

MYSQLI_REPORT_ERROR

がまだ有効になっていない場合は有効にする必要があります....リーリー

mysqli_query()

エラー時に例外をスローするようになりました。失敗時の戻り値をチェックする必要はありません (例外はいずれにせよスローされます)。リーリー(注: 再スローされた例外の

$this->SQL

$SQLに変更しました。)

いいねを押す+0
    P粉549412038

    しばらく前に、私はこの問題を正常に解決しました。他の回答で指摘されているように、

    リーリー

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

    すべてのクエリで try-catchをラップしないように注意してください。これは非常によくある誤解です。例外を使用し始めたら、どこでも try と catch をスローし始める必要があります。対照的に、try-catch は注意して使用する必要があります。ただし、エラーの 99% はサイト上で処理されるべきではなく、サイト全体のエラー ハンドラーによって処理される必要があります。このトピックについて詳しくは、私のPHP エラー報告記事をご覧ください。

    いいねを押す+0
      最新のダウンロード
      詳細>
      ウェブエフェクト
      公式サイト
      サイト素材
      フロントエンドテンプレート
      私たちについて 免責事項 Sitemap
      PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!