Saya mempunyai kelas data PHP saya sendiri yang merekodkan ralat MySQL ke fail txt menggunakan mysqli_error($this->conn)
Semuanya berfungsi dengan baik sehingga saya menetapkan pengendalian ralat PHP kepada E_ALL. Sekarang PHP memintas ralat dan ia tidak mempunyai peluang untuk dikendalikan oleh pengendali ralat MySQL saya.
Ini tidak akan menjadi masalah kecuali PHP tidak merekodkan rentetan SQL penuh ralat. Ia hanya mencatatkan 20 aksara pertama atau lebih, diikuti dengan "...", yang tidak begitu berguna untuk nyahpepijat.
Jadi soalan saya ialah: adakah mungkin untuk memberitahu PHP untuk mengabaikan ralat MySQL semasa masih mengendalikan ralat PHP?
Saya telah melihat pelbagai peringkat error_reporting() tetapi tiada apa yang nampaknya meninggalkan ralat MySQL secara khusus.
Anda boleh melakukan ini dengan melumpuhkan pelaporan ralat mysqli, tetapi ini tidak sepatutnya dilakukan untuk mana-mana projek biasa. Malah, nampaknya anda melakukan masalah ini dengan cara yang salah! Anda tidak sepatutnya mahu melumpuhkan pelaporan ralat, anda harus membetulkan ralat!
Seperti yang anda nyatakan, jika ralat datang daripada pernyataan SQL dinamik yang tidak dibina dengan betul, maka kod anda tidak seharusnya mengandungi sebarang logik untuk mengendalikan senario yang mungkin ini kerana anda tidak mahu ralat itu menjadi sebahagian daripada reka bentuk. Sama seperti ralat lain, ini adalah pepijat dalam kod PHP. Hakikat bahawa ia menunjukkan dirinya sebagai ralat MySQL adalah tidak relevan. Anda mesti membetulkan kod yang membina pernyataan SQL yang tidak sah!Menyenyapkan ralat tidak membantu membetulkan ralat!
Dengan mengandaikan bahawa kod PHP anda membina SQL daripada bahagian SQL tetap (jika ia menggunakan pembolehubah, maka terdapat masalah yang lebih besar dalam kod anda), maka tugas anda adalah untuk menentukan laluan kod yang menyebabkan gabungan kata kunci SQL yang salah. Anda boleh membuat kesimpulan sebahagiannya daripada ralat SQL. Mesej pengecualian akan memberitahu anda apakah ralat sintaks. Jika ralat MySQL tidak berkaitan dengan sintaks yang rosak, prosesnya masih serupa: cari punca ralat dan betulkan.
Jangan tulis logik pengendalian ralat khas di sekitar kod SQL. Ia mengelirukan dan sama sekali tidak perlu.