Maison >base de données >tutoriel mysql >Comment utiliser en toute sécurité la clause IN avec des espaces réservés dans SQLite pour Android ?

Comment utiliser en toute sécurité la clause IN avec des espaces réservés dans SQLite pour Android ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2025-01-18 17:16:09820parcourir

How to Safely Use the IN Clause with Placeholders in SQLite for Android?

Clause IN et espaces réservés

Question :

Les requêtes SQLite utilisant des clauses IN avec concaténation dynamique de chaînes dans Android sont confrontées aux défis suivants :

  • Les espaces réservés standard (?) n'ont pas été remplacés correctement.
  • Le remplacement direct de la chaîne concaténée peut exposer la requête au risque d'injection SQL.

Solution :

Pour paramétrer une clause IN, utilisez une chaîne de points d'interrogation délimités par des virgules dont la longueur est égale au nombre de valeurs à remplacer. Évitez d'utiliser des données externes pour garantir la validité des chaînes dynamiques.

<code>String[] names = { "name1", "name2" }; // 动态获取值
String query = "SELECT * FROM table WHERE name IN (" + makePlaceholders(names.length) + ")";
Cursor cursor = mDb.rawQuery(query, names);</code>
<code>public static String makePlaceholders(int len) {
    if (len < 1) {
        throw new IllegalArgumentException("Length must be at least 1");
    }
    StringBuilder sb = new StringBuilder(len * 2 - 1);
    sb.append("?");
    for (int i = 1; i < len; i++) {
        sb.append(",?");
    }
    return sb.toString();
}</code>

Cette approche garantit que les espaces réservés sont remplacés correctement et empêche l'injection SQL.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn