Rumah > Soal Jawab > teks badan
P粉4209586922023-08-25 10:43:00
Tidak.
Anda sepatutnya dapat mengikuti keperluan anda dan mengarahkan pemandu mysqli untuk membuang pengecualian pada ralat SQL, tetapi anda perlu mendayakannya jika ia belum didayakan MYSQLI_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
更改为$SQL
dalam pengecualian yang dilemparkan semula.)
P粉5494120382023-08-25 00:06:47
Beberapa masa lalu saya berjaya menyelesaikan masalah ini. Seperti yang dinyatakan dalam jawapan lain,
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
ialah cara yang betul untuk memberitahu mysqli membuang pengecualian.
Hanya pastikan tidak membalut try-catch dalam 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 tentang Pelaporan Ralat PHP.