> 데이터 베이스 > MySQL 튜토리얼 > SQL IN 문의 SqlParameter로 목록을 안전하게 사용하는 방법은 무엇입니까?

SQL IN 문의 SqlParameter로 목록을 안전하게 사용하는 방법은 무엇입니까?

Patricia Arquette
풀어 주다: 2024-12-28 07:05:23
원래의
887명이 탐색했습니다.

How to Safely Use a List as a SqlParameter for an SQL IN Statement?

목록 번역 SQL IN 문의 SqlParameter

쿼리 내에 포함된 "IN" 문은 특정 열이 제공된 값 목록 내에서 일치하는 값을 가져야 함을 지정합니다. SqlCommand 개체를 활용하는 SQL IN 문으로 작업할 때 List 호환되는 SqlParameter로 변환합니다.

제공된 코드 조각에서:

cmd.CommandText = "Select dscr from system_settings where setting in @settings";
cmd.Connection = conn;
cmd.Parameters.Add(new SqlParameter("@settings", settingsList));

reader = cmd.ExecuteReader();
로그인 후 복사

매개변수 settingsList는 List IN 문에서 평가할 값을 포함합니다. 그러나 List 알려진 공급자 유형과의 비호환성으로 인해 예외가 발생합니다.

SqlCommands를 사용하여 IN 쿼리를 안전하게 실행하려면 다음 접근 방식을 사용하는 것이 좋습니다.

  1. 다음 접근 방식을 사용하는 것이 좋습니다. 자리 표시자:
string sql = "SELECT dscr FROM system_settings WHERE setting IN ({0})";
로그인 후 복사

이 명령문에서 {0}는 다음 단계에서 생성된 동적 매개변수 목록에 대한 자리 표시자 역할을 합니다.

  1. 파라미터 준비 Array:
string[] paramArray = settingList.Select((x, i) => "@settings" + i).ToArray();
로그인 후 복사

여기서 문자열 배열 paramArray는 settingsList를 반복하고 각 값을 "@settings0", "@settings1" 형식의 명명된 매개 변수에 할당하여 파생됩니다. 등

  1. 문 결합 매개변수:
cmd.CommandText = string.Format(sql, string.Join(",", paramArray));
로그인 후 복사

Format 메소드는 명령문 템플릿을 매개변수 목록과 결합하여 매개변수화된 SQL 문을 생성합니다.

  1. 매개변수 추가 :
for (int i = 0; i < settingList.Count; ++i)
{
    cmd.Parameters.Add(new SqlParameter("@settings" + i, settingList[i]));
}
로그인 후 복사

개별 매개변수가 각 값에 해당 매개변수가 있는지 확인하기 위해 settingsList를 반복하는 루프를 사용하는 SqlCommand 개체.

이러한 단계를 수행하면 List를 사용하여 SqlCommand 개체로 IN 쿼리를 효과적으로 수행할 수 있습니다. 데이터 보안을 유지하고 잠재적인 주입 공격을 방지하는 동시에 입력으로 사용됩니다.

위 내용은 SQL IN 문의 SqlParameter로 목록을 안전하게 사용하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿