Rumah >pembangunan bahagian belakang >tutorial php >Bagaimanakah Saya Boleh Mendapatkan Kembali Pertanyaan SQL Berinterpolasi Akhir Parameter daripada Penyata Disediakan PDO?

Bagaimanakah Saya Boleh Mendapatkan Kembali Pertanyaan SQL Berinterpolasi Akhir Parameter daripada Penyata Disediakan PDO?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-15 17:53:14194semak imbas

How Can I Retrieve the Final, Parameter-Interpolated SQL Query from a PDO Prepared Statement?

Mendapatkan semula Pertanyaan SQL Mentah daripada Penyata Disediakan PDO

Dalam konteks pernyataan yang disediakan, konsep "rentetan pertanyaan SQL mentah" tidak langsung. Apabila PDOStatement::execute() digunakan pada pernyataan yang disediakan, pernyataan SQL yang akan dilaksanakan adalah berbeza daripada pernyataan yang disediakan itu sendiri.

Mengakses pertanyaan SQL akhir, diinterpolasi dengan nilai parameter, bukanlah proses yang mudah wujud pada kenyataan yang disediakan. Parameter tidak disatukan dengan pernyataan yang disediakan pada bahagian klien, menjadikannya tidak boleh diakses oleh PDO.

Pernyataan SQL dihantar ke pelayan pangkalan data semasa operasi prepare(), manakala parameter dihantar secara berasingan apabila execute( ) dipanggil. MySQL mengekalkan log pertanyaan umum yang mendedahkan SQL akhir dengan nilai terbenam selepas execute(). Walau bagaimanapun, log ini adalah luaran kepada PDO dan tidak mewakili rentetan pertanyaan "mentah".

Satu penyelesaian melibatkan penetapan atribut PDO PDO::ATTR_EMULATE_PREPARES. Dalam mod ini, PDO menginterpolasi parameter ke dalam pertanyaan SQL sebelum melaksanakannya. Walau bagaimanapun, kaedah ini menjejaskan keberkesanan penyataan yang disediakan.

Harta $queryString objek PDOStatement mungkin kelihatan seperti penyelesaian yang berpotensi, tetapi ia hanya ditetapkan semasa pemulaan objek dan tidak mencerminkan interpolasi parameter. Mendedahkan pertanyaan yang ditulis semula sebagai ciri akan memberi manfaat, tetapi ia masih tidak memenuhi keperluan melainkan PDO::ATTR_EMULATE_PREPARES digunakan.

Menggunakan log pertanyaan umum pelayan MySQL menyediakan penyelesaian kerana ia merekodkan pertanyaan yang ditulis semula. Namun begitu, ini hanya terpakai semasa pengelogan, bukan pelaksanaan pertanyaan.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mendapatkan Kembali Pertanyaan SQL Berinterpolasi Akhir Parameter daripada Penyata Disediakan PDO?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn