mysqli_sql_exception: Tiada Indeks Digunakan
Apabila anda menghadapi ralat "Ralat maut: Pengecualian tidak ditangkap 'mysqli_sql_exception' dengan mesej 'Tiada indeks digunakan dalam pertanyaan/pernyataan yang disediakan'," ia tidak berasal dari MySQL. Sebaliknya, ralat maut terletak dalam kod PHP anda.
Punca Ralat Maut
Ralat timbul disebabkan oleh faktor berikut:
-
Amaran mysqli Mencetuskan Pengecualian: Dengan menetapkan mysqli_report(MYSQLI_REPORT_ALL), anda mencetuskan pengecualian untuk semua amaran MySQL, termasuk amaran "Tiada indeks digunakan" yang tidak berbahaya.
-
Pengecualian Tidak Ditangkap: Kod PHP anda kekurangan try{} dan catch() {} menyekat untuk mengendalikan pengecualian dengan sewajarnya. Pengecualian yang tidak ditangkap dianggap membawa maut dalam PHP.
Penyelesaian
Untuk menangani isu ini, anda mempunyai dua pilihan:
Pilihan 1: Laraskan Tetapan mysqli_report
- Tukar mysqli_report(...) kepada MYSQLI_REPORT_STRICT atau MYSQLI_REPORT_OFF untuk menyekat semua amaran kecuali untuk ralat yang membawa maut.
- Sebagai alternatif, gunakan mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT sahaja) untuk melaporkan ralat kritikal sahaja amaran.
Pilihan 2: Laksanakan Pengendalian Pengecualian
- Sisipkan kod anda dalam blok try{} dan catch(){} untuk mengendalikan mysqli_sql_exception dengan betul. Ini membolehkan anda mengendalikan amaran tanpa menyebabkan ralat maut.
Petua Tambahan
- Gunakan EXPLAIN sebelum sebarang pertanyaan untuk mengenal pasti sebarang kemungkinan indeks yang hilang dan meningkatkan prestasi.
- Optimumkan pangkalan data anda dengan mencipta indeks yang sesuai pada yang sering ditanya medan.
Dengan melaksanakan penyelesaian ini, anda boleh menghapuskan ralat maut dan memastikan pengendalian pengecualian yang betul dalam kod PHP anda sambil menangani sebarang isu pengindeksan asas dalam pangkalan data anda.
Atas ialah kandungan terperinci Mengapa Kod PHP Saya Melemparkan Ralat Maut 'mysqli_sql_exception: Tiada Indeks Digunakan'?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!