>데이터 베이스 >MySQL 튜토리얼 >Android용 SQLite에서 자리 표시자와 함께 IN 절을 안전하게 사용하는 방법은 무엇입니까?

Android용 SQLite에서 자리 표시자와 함께 IN 절을 안전하게 사용하는 방법은 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2025-01-18 17:16:09760검색

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

IN 절 및 자리표시자

질문:

Android에서 동적 문자열 연결과 함께 IN 절을 사용하는 SQLite 쿼리는 다음과 같은 문제에 직면합니다.

  • 표준 자리 표시자(?)가 올바르게 교체되지 않았습니다.
  • 연결된 문자열을 직접 바꾸면 쿼리가 SQL 삽입 위험에 노출될 수 있습니다.

해결책:

IN 절을 매개변수화하려면 대체할 값의 개수와 길이가 같은 쉼표로 구분된 물음표 문자열을 사용하세요. 동적 문자열의 유효성을 보장하려면 외부 데이터를 사용하지 마십시오.

<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>

이 접근 방식을 사용하면 자리 표시자가 올바르게 교체되고 SQL 삽입이 방지됩니다.

위 내용은 Android용 SQLite에서 자리 표시자와 함께 IN 절을 안전하게 사용하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.