동적 열 이름에 대해 준비된 문 사용
데이터베이스 쿼리 작업 시 동적 열 이름을 지정하려고 할 때 일반적인 딜레마가 발생합니다. 이 기사에서는 특히 Java를 사용하는 MySQL에서 준비된 문을 통해 변수 열 이름을 전달할 수 있는 가능성을 살펴봅니다.
챌린지 문
사용자가 준비된 문을 실행하려고 하면 열 이름은 문자열로 전달됩니다.
String columnNames = "d,e,f"; String query = "SELECT a,b,c,? FROM " + name + " WHERE d=?"; stmt = conn.prepareStatement(query); stmt.setString(1, columnNames); stmt.setString(2, "x");
그러나 결과 SQL 문은 열 이름을 리터럴의 일부로 표시합니다. 문자열:
SELECT a,b,c,'d,e,f' FROM some_table WHERE d='x'
그러나 원하는 출력은 열 이름을 별도의 열로 갖는 것입니다.
SELECT a,b,c,d,e,f FROM some_table WHERE d='x'
솔루션 토론
이러한 관행은 데이터베이스 설계에 결함이 있음을 나타냅니다. 이상적으로는 사용자가 열 이름을 인식해서는 안 됩니다. 더 나은 해결책은 대신 "열 이름"을 저장하기 위해 데이터베이스에 명시적인 열을 생성하는 것입니다.
안타깝게도 열 이름을 preparedStatement 값으로 설정하는 것은 불가능합니다. 준비된 문은 컬럼 값을 설정하는 데에만 사용할 수 있습니다.
부득이하게 변수 컬럼 이름을 사용하는 경우 입력을 삭제하고 SQL 문자열을 수동으로 구성해야 합니다. 여기에는 개별 열 이름을 인용하고 String#replace()를 사용하여 열 이름 내의 따옴표를 이스케이프하는 작업이 포함됩니다.
위 내용은 준비된 문이 SQL 쿼리의 동적 열 이름을 처리할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!