


Mengapa Saya Tidak Boleh Menggunakan Penyata Disediakan untuk Nama Jadual dalam SQL?
Jan 19, 2025 pm 01:32 PMSQL Disediakan Penyata dan Nama Jadual: Satu Perangkap Biasa
Pernyataan yang disediakan adalah penting untuk pertanyaan SQL yang selamat, menghalang kelemahan suntikan SQL. Walau bagaimanapun, salah tanggapan yang kerap ialah nama jadual boleh diparameterkan dalam pernyataan yang disediakan. Ini tidak betul.
Contoh berikut menggambarkan masalah: Percubaan untuk menggunakan pernyataan yang disediakan untuk menentukan nama jadual secara dinamik (cth., query1
) menggunakan parameter ([?]
) dan pembolehubah seperti reportDate
akan gagal. Ralat "Parameter 'Pa_RaM000' yang dinyatakan di mana nama jadual diperlukan" menyerlahkan pengehadan ini.
Penyelesaian: Pembinaan Dinamik Di Luar Penyata Disediakan
Isu terasnya ialah penghurai SQL merawat nama jadual secara berbeza daripada parameter pertanyaan lain. Ia tidak boleh disuntik secara dinamik melalui ruang letak pernyataan yang disediakan.
Pendekatan yang betul melibatkan membina nama jadual secara dinamik sebelum pernyataan yang disediakan digunakan. Ini dilakukan dengan menggabungkan pembolehubah yang mengandungi bahagian tarikh (cth., reportDate
) dengan bahagian tetap nama jadual:
private String query1 = "SELECT plantID, edrman, plant, vaxnode FROM [" + reportDate + ".?]";
Di sini, reportDate
menyediakan bahagian tarikh khusus nama jadual, yang digabungkan dengan bahagian statik. Parameter selebihnya dalam pernyataan SELECT
kemudiannya boleh diparameterkan dengan selamat dalam pernyataan yang disediakan itu sendiri.
Kaedah ini membolehkan penjanaan pertanyaan dinamik sambil mengekalkan kelebihan keselamatan pernyataan yang disediakan untuk nilai data.
Atas ialah kandungan terperinci Mengapa Saya Tidak Boleh Menggunakan Penyata Disediakan untuk Nama Jadual dalam SQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Artikel Panas

Alat panas Tag

Artikel Panas

Tag artikel panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Kurangkan penggunaan memori MySQL di Docker

Bagaimana anda mengubah jadual di MySQL menggunakan pernyataan Alter Table?

Cara menyelesaikan masalah MySQL tidak dapat membuka perpustakaan bersama

Apa itu SQLite? Gambaran Keseluruhan Komprehensif

Jalankan MySQL di Linux (dengan/tanpa bekas podman dengan phpmyadmin)

Menjalankan Pelbagai Versi MySQL di MacOS: Panduan Langkah demi Langkah

Bagaimanakah saya menjamin MySQL terhadap kelemahan biasa (suntikan SQL, serangan kekerasan)?

Apakah beberapa alat GUI MySQL yang popular (mis., MySQL Workbench, phpmyadmin)?
