Rumah pangkalan data tutorial mysql Mengapa Saya Tidak Boleh Menggunakan Penyata Disediakan untuk Nama Jadual dalam SQL?

Mengapa Saya Tidak Boleh Menggunakan Penyata Disediakan untuk Nama Jadual dalam SQL?

Jan 19, 2025 pm 01:32 PM

Why Can't I Use Prepared Statements for Table Names in SQL?

SQL 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 + ".?]";
Salin selepas log masuk

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!

Kenyataan Laman Web ini
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

Tag artikel panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Kurangkan penggunaan memori MySQL di Docker Kurangkan penggunaan memori MySQL di Docker Mar 04, 2025 pm 03:52 PM

Kurangkan penggunaan memori MySQL di Docker

Bagaimana anda mengubah jadual di MySQL menggunakan pernyataan Alter Table? Bagaimana anda mengubah jadual di MySQL menggunakan pernyataan Alter Table? Mar 19, 2025 pm 03:51 PM

Bagaimana anda mengubah jadual di MySQL menggunakan pernyataan Alter Table?

Cara menyelesaikan masalah MySQL tidak dapat membuka perpustakaan bersama Cara menyelesaikan masalah MySQL tidak dapat membuka perpustakaan bersama Mar 04, 2025 pm 04:01 PM

Cara menyelesaikan masalah MySQL tidak dapat membuka perpustakaan bersama

Apa itu SQLite? Gambaran Keseluruhan Komprehensif Apa itu SQLite? Gambaran Keseluruhan Komprehensif Mar 04, 2025 pm 03:55 PM

Apa itu SQLite? Gambaran Keseluruhan Komprehensif

Jalankan MySQL di Linux (dengan/tanpa bekas podman dengan phpmyadmin) Jalankan MySQL di Linux (dengan/tanpa bekas podman dengan phpmyadmin) Mar 04, 2025 pm 03:54 PM

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

Menjalankan Pelbagai Versi MySQL di MacOS: Panduan Langkah demi Langkah Menjalankan Pelbagai Versi MySQL di MacOS: Panduan Langkah demi Langkah Mar 04, 2025 pm 03:49 PM

Menjalankan Pelbagai Versi MySQL di MacOS: Panduan Langkah demi Langkah

Bagaimanakah saya menjamin MySQL terhadap kelemahan biasa (suntikan SQL, serangan kekerasan)? Bagaimanakah saya menjamin MySQL terhadap kelemahan biasa (suntikan SQL, serangan kekerasan)? Mar 18, 2025 pm 12:00 PM

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

Apakah beberapa alat GUI MySQL yang popular (mis., MySQL Workbench, phpmyadmin)? Apakah beberapa alat GUI MySQL yang popular (mis., MySQL Workbench, phpmyadmin)? Mar 21, 2025 pm 06:28 PM

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

See all articles