> 데이터 베이스 > MySQL 튜토리얼 > 준비된 문이 SELECT 쿼리의 동적 열 이름을 처리할 수 있습니까?

준비된 문이 SELECT 쿼리의 동적 열 이름을 처리할 수 있습니까?

Barbara Streisand
풀어 주다: 2025-01-19 17:26:09
원래의
297명이 탐색했습니다.

Can Prepared Statements Handle Dynamic Column Names in SELECT Queries?

준비된 문: SELECT 쿼리에서 동적 열 이름 처리

도전:

준비된 문이 SELECT 쿼리 내에서 동적 열 이름을 수용할 수 있습니까?

시나리오:

한 사용자가 MySQL 및 Java 예를 설명했습니다.

<code class="language-java">String columnNames = "d,e,f"; // From user input
String tableName = "some_table"; // From user input
String query = "SELECT a,b,c,? FROM " + tableName + " WHERE d=?";
//...</code>
로그인 후 복사

매개변수를 columnNames 문자열로 대체하면 다음과 같은 결과가 나옵니다.

<code class="language-sql">SELECT a,b,c,'d,e,f' FROM some_table WHERE d='x'</code>
로그인 후 복사

그러나 의도된 결과는 다음과 같습니다.

<code class="language-sql">SELECT a,b,c,d,e,f FROM some_table WHERE d='x'</code>
로그인 후 복사

해결책:

동적 열 이름에 대해 준비된 문을 직접 사용하는 것은 가능하지 않습니다. 준비된 문은 열 식별자가 아닌 을 매개변수화합니다.

대체 전략:

가장 효과적인 솔루션은 데이터베이스 스키마 수정입니다. 수많은 열에 데이터를 분산시키는 대신 동적으로 이름이 지정된 열을 보관할 수 있는 단일 열을 도입하세요. 이 열에는 각 행의 열 이름 목록을 나타내는 직렬화된 문자열이 포함됩니다.

SQL 삽입을 방지하려면 엄격한 입력 삭제가 필요합니다. String#replace()을 사용하여 따옴표를 이스케이프한 다음 삭제된 열 이름을 SQL 쿼리 문자열에 연결하는 것이 실행 가능한 방법입니다. 가능한 경우 보안상의 이점을 유지하려면 쿼리의 다른 부분에 매개변수화된 쿼리를 사용하는 것이 좋습니다.

위 내용은 준비된 문이 SELECT 쿼리의 동적 열 이름을 처리할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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