Apabila menyahpepijat kenyataan yang disediakan PDO, selalunya berguna untuk mempunyai akses kepada rentetan pertanyaan SQL mentah yang telah dilaksanakan. Walau bagaimanapun, ia tidak serta-merta jelas bagaimana untuk melakukan ini, kerana kenyataan yang disediakan biasanya melibatkan pemisahan data parameter daripada pertanyaan sebenar.
Tidak seperti pernyataan SQL biasa, di mana pertanyaan dan parameter dihantar ke pangkalan data bersama-sama, pernyataan yang disediakan dibahagikan kepada dua bahagian:
Pemisahan ini menghalang serangan suntikan SQL. Walau bagaimanapun, ini juga bermakna bahawa PDO tidak mempunyai akses terus kepada rentetan pertanyaan gabungan dengan nilai parameter terinterpolasi.
Untuk mengakses rentetan pertanyaan terinterpolasi, satu pilihan adalah untuk menetapkan atribut PDO::ATTR_EMULATE_PREPARES. Mod ini memaksa PDO untuk mencontohi pertanyaan yang disediakan pada bahagian klien, menggabungkan pertanyaan dan parameter sebelum menghantarnya ke pangkalan data.
Walau bagaimanapun, kaedah ini mengingatkan:
Jika anda menggunakan MySQL, anda boleh mendayakan log pertanyaan umum untuk menangkap rentetan pertanyaan yang diinterpolasi. Walau bagaimanapun, pendekatan ini memerlukan pertanyaan telah dilaksanakan.
Malangnya, tiada cara yang boleh dipercayai untuk mendapatkan rentetan pertanyaan yang diinterpolasi terus daripada PDO tanpa menggunakan emulasi atau pengelogan.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Melihat Pertanyaan SQL Sebenar yang Dilaksanakan oleh Penyata PDO Saya yang Disediakan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!