Rumah > pangkalan data > tutorial mysql > Bagaimana untuk Meratakan Klausa IN dengan Selamat dalam Pertanyaan SQL Android?

Bagaimana untuk Meratakan Klausa IN dengan Selamat dalam Pertanyaan SQL Android?

Barbara Streisand
Lepaskan: 2025-01-18 17:32:09
asal
500 orang telah melayarinya

How to Safely Parameterize the IN Clause in Android SQL Queries?

DALAM klausa dan teka-teki pemegang tempat dalam pertanyaan Android SQL

Dalam Android, melaksanakan pertanyaan SQL selalunya melibatkan penggunaan ruang letak berparameter untuk mengelakkan kerentanan suntikan SQL. Ini berlaku apabila klausa IN digunakan. Pertimbangkan pertanyaan berikut:

<code>String names = "name1', 'name2";   // 动态生成
String query = "SELECT * FROM table WHERE name IN (?)";
Cursor cursor = mDb.rawQuery(query, new String[]{names});</code>
Salin selepas log masuk

Walau bagaimanapun, Android tidak boleh menggantikan tanda soal dengan nilai yang disediakan. Sebagai alternatif, anda boleh memilih:

<code>String query = "SELECT * FROM table WHERE name IN (" + names + ")";
Cursor cursor = mDb.rawQuery(query, null);</code>
Salin selepas log masuk

Walaupun pendekatan ini menghapuskan ancaman suntikan SQL, pendekatan ini gagal untuk meparameterkan pertanyaan dengan betul.

Fasal IN berparameter

Untuk mencapai parameterisasi sambil mengelakkan risiko suntikan, pertimbangkan untuk menggunakan rentetan dengan corak pemegang tempat:

<code>String query = "SELECT * FROM table WHERE name IN (" + makePlaceholders(names.length) + ")";
Cursor cursor = mDb.rawQuery(query, names);</code>
Salin selepas log masuk
Fungsi

makePlaceholders(len) menjana rentetan yang mengandungi bilangan tanda soal yang diperlukan, dipisahkan dengan koma. Ini membolehkan pertanyaan dimasukkan dengan selamat tanpa menjejaskan parameterisasi.

Pelaksanaan makePlaceholder(len):

<code>String makePlaceholders(int len) {
    if (len < 1) {
        throw new IllegalArgumentException("Length must be > 0");
    }
    StringBuilder sb = new StringBuilder(len * 2 - 1);
    sb.append("?");
    for (int i = 1; i < len; i++) {
        sb.append(",?");
    }
    return sb.toString();
}</code>
Salin selepas log masuk

Sila ambil perhatian bahawa SQLite biasanya menyokong sehingga 999 parameter hos, kecuali dalam beberapa versi Android tertentu.

Atas ialah kandungan terperinci Bagaimana untuk Meratakan Klausa IN dengan Selamat dalam Pertanyaan SQL Android?. 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