Dalam MySQLi, tukar ralat pertanyaan kepada pengecualian
P粉060528326
P粉060528326 2023-08-24 11:53:00
0
2
436

Saya cuba menukar ralat pertanyaan MySQLi kepada pengecualian, tetapi tidak mungkin - pengecualian mysqli_sql_exception hanya dilemparkan apabila sambungan ke pangkalan data gagal.

Saya menggunakan mysqli_report(MYSQLI_REPORT_STRICT) dengan fungsi MySQLi prosedur yang dibenamkan dalam kelas pembalut tersuai.

Kod sebelumnya:

public function mysqlQuery($SQL) { $this->Result = mysqli_query($this->DBlink, $SQL); if($this->Result === false) buang MySQLiQueryException baru($SQL, mysqli_error($this->DBlink), mysqli_errno($this->DBlink)); pulangkan $this->Result; }

Soalan: Tiada amaran atau pengecualian dilemparkan apabila pertanyaan gagal, adakah ini perkara biasa? Jadi saya perlu menyemak sama ada mysqli_query() mengembalikan palsu?

P粉060528326
P粉060528326

membalas semua (2)
P粉420958692

Tidak.

Anda sepatutnya dapat mengikuti keperluan anda dan mengarahkan pemandu mysqli untuk membuang pengecualian pada ralat SQL, tetapi anda perlu mendayakannya jika ia belum didayakanMYSQLI_REPORT_ERROR....

mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT)

mysqli_query()Pengecualian kini seharusnya dilemparkan ke atas kesilapan. Anda tidak perlu menyemak nilai pulangan apabila gagal (pengecualian akan dibuang).

public function mysqlQuery($SQL) { try { $this->Result = mysqli_query($this->DBlink, $SQL); } catch (mysqli_sql_exception $e) { throw new MySQLiQueryException($SQL, $e->getMessage(), $e->getCode()); } return $this->Result; }

(Nota: Saya akan$this->SQL更改为$SQLdalam pengecualian yang dilemparkan semula.)

    P粉549412038

    Beberapa masa lalu saya berjaya menyelesaikan masalah ini. Seperti yang dinyatakan dalamjawapan lain,

    mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

    ialah cara yang betul untuk memberitahu mysqli membuang pengecualian.

    Hanya pastikantidak membalut try-catchdalam setiap pertanyaan. Ini adalah salah tanggapan yang sangat biasa, sebaik sahaja anda mula menggunakan pengecualian, anda harus mula membuang cuba dan tangkap di mana-mana. Sebaliknya, cuba-tangkap harus digunakan dengan berhati-hati. Walaupun 99% ralat tidak seharusnya dikendalikan di tapak tetapi oleh pengendali ralat seluruh tapak. Anda boleh mengetahui lebih lanjut mengenai topik ini daripada artikel saya tentangPelaporan Ralat PHP.

      Muat turun terkini
      Lagi>
      kesan web
      Kod sumber laman web
      Bahan laman web
      Templat hujung hadapan
      Tentang kita Penafian Sitemap
      Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!