Rumah > pangkalan data > tutorial mysql > Bagaimanakah Saya Boleh Mendapatkan Data dengan Nama Lajur Dinamik Menggunakan Penyata Disediakan dalam MySQL dan Java?

Bagaimanakah Saya Boleh Mendapatkan Data dengan Nama Lajur Dinamik Menggunakan Penyata Disediakan dalam MySQL dan Java?

Susan Sarandon
Lepaskan: 2025-01-19 17:32:09
asal
662 orang telah melayarinya

How Can I Retrieve Data with Dynamic Column Names Using Prepared Statements in MySQL and Java?

Pendapatan Nama Lajur Dinamik dalam MySQL dan Java Menggunakan Penyata Disediakan: Pendekatan Lebih Selamat

Ramai pembangun MySQL dan Java telah meneroka menggunakan pernyataan yang disediakan untuk mendapatkan semula data dengan nama lajur yang dijana secara dinamik. Walau bagaimanapun, menggantikan nama lajur secara langsung ke dalam parameter pernyataan yang disediakan tidak disokong dan memperkenalkan risiko keselamatan yang ketara. Reka bentuk semula skema pangkalan data biasanya merupakan penyelesaian terbaik.

Percubaan untuk menggunakan pernyataan yang disediakan dengan cara ini, seperti yang ditunjukkan di bawah, mengakibatkan ralat:

<code class="language-java">String columnNames = "d,e,f";
String query = "SELECT a,b,c,?" + " FROM " + name + " WHERE d=?"; 
// This results in "SELECT a,b,c,'d,e,f' FROM some_table WHERE d='x'", not the desired result.</code>
Salin selepas log masuk

Pertanyaan menganggap ? pemegang tempat sebagai rentetan literal, bukan nama lajur.

Untuk mengelakkan kelemahan suntikan SQL, kaedah yang lebih mantap melibatkan penyimpanan nama lajur dinamik dalam pangkalan data itu sendiri. Pertimbangkan jadual seperti "data_pengguna" dengan lajur ini:

  • id (kunci utama)
  • user_name
  • column_names (rentetan nama lajur yang dipisahkan koma)

Pertanyaan SQL kemudiannya boleh dibina dengan menggabungkan column_names yang diambil daripada jadual ini:

<code class="language-java">String query = "SELECT a,b,c," + columnNames + " FROM " + name + " WHERE d=?";</code>
Salin selepas log masuk

Pendekatan ini memastikan bahawa nama lajur tidak dianggap sebagai parameter yang terdedah kepada serangan suntikan. Walaupun ia menggunakan penggabungan rentetan, bahagian yang terdedah (nama lajur) sudah dibersihkan dengan diambil daripada pangkalan data. Ingat, sentiasa bersihkan mana-mana data yang dibekalkan pengguna yang digunakan dalam pembinaan pertanyaan, walaupun ia bukan sebahagian langsung daripada pernyataan SQL. Pendekatan yang disemak ini menawarkan penyelesaian yang lebih selamat dan terurus untuk mengendalikan nama lajur dinamik.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mendapatkan Data dengan Nama Lajur Dinamik Menggunakan Penyata Disediakan dalam MySQL dan Java?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan