Mendapatkan semula Rentetan Pertanyaan SQL Mentah daripada Penyata Disediakan PDO
Apabila menggunakan pernyataan yang disediakan PDO untuk pelaksanaan pertanyaan, ia boleh menjadi berharga untuk tujuan penyahpepijatan untuk mendapatkan semula rentetan SQL mentah yang dilaksanakan. Walau bagaimanapun, tidak seperti pertanyaan berparameter, pernyataan yang disediakan tidak menggabungkan parameter dengan pertanyaan SQL pada bahagian klien.
Pernyataan dan parameter SQL dihantar secara berasingan ke pelayan pangkalan data semasa operasi prepare() dan execute() , masing-masing. Akibatnya, PDO tidak mempunyai akses kepada rentetan SQL yang digabungkan dengan parameter.
Log Pertanyaan Umum MySQL:
Satu cara untuk menangkap pertanyaan akhir dengan nilai interpolasi adalah dengan menggunakan Log pertanyaan umum MySQL. Log ini merekodkan pernyataan SQL akhir selepas panggilan execute(). Walau bagaimanapun, teknik ini memerlukan mendayakan log pertanyaan umum pada pelayan MySQL.
Pdo Prepared Statement Emulation:
Pilihan lain adalah untuk mendayakan atribut PDO PDO::ATTR_EMULATE_PREPARES . Dalam mod ini, PDO menginterpolasi parameter ke dalam pertanyaan SQL sebelum menghantarnya semasa pelaksanaan. Walau bagaimanapun, adalah penting untuk ambil perhatian bahawa kaedah ini bukanlah pelaksanaan kenyataan yang disediakan yang benar dan memintas faedah menggunakan pertanyaan yang disediakan.
Kekeliruan Harta Penyata PDO:
Percubaan awal untuk mengakses pertanyaan yang diinterpolasi mungkin melibatkan perundingan harta PDOStatement $queryString. Walau bagaimanapun, sifat ini hanya ditetapkan semasa pembina PDOStatement dan tidak dikemas kini apabila parameter diinterpolasi ke dalam pertanyaan.
Pendedahan Pertanyaan Ditulis Semula:
Potensi peningkatan ciri untuk PDO adalah untuk mendedahkan pertanyaan yang ditulis semula. Malah pendekatan ini hanya akan memberikan pertanyaan lengkap apabila menggunakan PDO::ATTR_EMULATE_PREPARES.
Penyelesaian:
Sebagai alternatif, anda boleh bergantung pada log pertanyaan umum pelayan MySQL untuk melihat pertanyaan yang ditulis semula dengan nilai parameter yang diinterpolasi selepas pelaksanaan pertanyaan.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Dapatkan Kembali Rentetan Pertanyaan SQL Akhir daripada Penyata Disediakan PDO?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!