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
Susan Sarandonasal
2025-01-19 17:32:09702semak imbas

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>

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>

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!

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