Mengambil semula Raw SQL Query daripada PDO Prepared Statements
Menyahpepijat kenyataan yang disediakan dalam PDO boleh mencabar kerana pertanyaan SQL mentah tidak mudah diakses. Ini kerana parameter tidak diinterpolasi ke dalam pernyataan SQL pada bahagian klien. Sebaliknya, parameter dihantar secara berasingan semasa panggilan execute().
Gelagat Lalai PDO
Secara lalai, PDO tidak menyediakan cara langsung untuk mendapatkan pertanyaan SQL akhir . Pernyataan SQL dihantar ke pangkalan data semasa panggilan prepare() dan parameter dihantar secara berasingan semasa panggilan execute().
Menggunakan Log Pertanyaan
Satu penyelesaian untuk ini adalah untuk membolehkan log pertanyaan umum MySQL. Log ini merekodkan semua pertanyaan yang dilaksanakan, termasuk pernyataan yang disediakan dengan nilai parameter yang diinterpolasi. Anda boleh menyemak log ini untuk memeriksa pertanyaan SQL sebenar yang dilaksanakan.
Mod Emulasi PDO
Sebagai alternatif, anda boleh menetapkan atribut PDO::ATTR_EMULATE_PREPARES. Apabila atribut ini didayakan, PDO akan menginterpolasi parameter ke dalam pertanyaan SQL sebelum menghantarnya ke pangkalan data. Walau bagaimanapun, ini bukanlah kenyataan yang disediakan yang benar dan boleh menjejaskan faedah keselamatan dan kecekapan menggunakan pernyataan yang disediakan.
Penghadan
Tidak kira pendekatan yang digunakan, terdapat pengehadan untuk mengakses pertanyaan SQL mentah:
Kesimpulan
Mendapatkan semula pertanyaan SQL mentah daripada pernyataan yang disediakan oleh PDO adalah tidak mudah. Walau bagaimanapun, menggunakan log pertanyaan MySQL atau menetapkan mod emulasi PDO boleh menyediakan penyelesaian untuk tujuan penyahpepijatan. Adalah penting untuk mengetahui batasan dan kemungkinan implikasi menggunakan penyelesaian ini.
Atas ialah kandungan terperinci Bagaimanakah saya boleh mendapatkan semula Pertanyaan SQL Mentah daripada Penyata Disediakan PDO?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!