자유롭게 질의 및 응답을 할 수 있는 게시판입니다. 개발자 여러분의 답변이 큰 도움이 됩니다. 
  • 제품설치/등록 오류 문의: 설치/등록 Q&A 이용 (제품 구매 고객 한정)

Q, 

FireDAC-MySQL 사용 중 '!abc'와 같이 느낌표와 문자 사용 시 문자가 없어지는 현상이 발생합니다.

 

  sql := 'UPDATE USER SET ADDRESS = ''!abcd'' WHERE USER_ID = 1';

  FDQuery2.SQL.Text := sql;
  FDQuery2.ExecSQL;
 

위와 같이 실행하면, ADDRESS 필드의 값이 공백으로 업데이트 됩니다.

 

A, 

코드를 분석해 보니, MySQL에서 느낌표('!')를 매크로 접두문자로 사용하는 것으로 파악됩니다.(관련된 문서는 찾기 어렵네요.)

FireDAC.Phys.SQLPreprocessor.pas 소스코드의 ProcessCommand 메소드 소스 보면 아래와 같은 구문이 있습니다.

(일부)

      case GetChar of
      '!', '&':
        if Instrs * [piExpandMacros, piCreateMacros] <> [] then begin
          ProcessMacro(FCh);
          GetChar;
        end;
위 코드는 느낌표로 시작되는 경우 매크로로 인식해 매크로 처리를 합니다.

 

위 과정 중 문자열이 누실될 수 있습니다.

 

해결방법은 다음과 같습니다.(1번 방법이 가장 좋은 방법입니다.)

1) 파라메터를 사용합니다. SQL문을 직접 작성하는 경우 SQL Injection과 같은 보안취약점이 발생할 수 있습니다.

가능한 파라메터를 사용하시기 바랍니다.

  sql := 'UPDATE USER SET ADDRESS = :ADDR WHERE USER_ID = 1';

  FDQuery2.SQL.Text := sql;
  FDQUery2.ParamByName('ADDR').AsString := '!abcd';
  FDQuery2.ExecSQL;
 

2) 매크로를 사용하지 않도록 FDQuery 옵션을 수정합니다.

TFDQuery.ResourceOptions의 MacroCreate, MacroExpand 항목을 False로 변경합니다.

번호 제목 글쓴이 날짜 조회 수
공지 [프로그래밍 강의] 2021.6~2021.12 관리자 2015.01.22 33451
공지 유용한 관련 사이트 관리자2 2014.03.20 72999
3272 rad studio xe2 설치 프로그램 실행시 설치프로그램 강제 종료 secret 마구 2013.04.30 0
3271 paserver오류 [1] secret 최종호 2013.05.02 1
3270 DB 관련 질문 입니다! [1] secret 탄돌이 2013.06.17 1
3269 JVL이라는 라이브러리 관련에러 [1] secret 관리자 2015.02.25 1
3268 제품관련 질문입니다. [1] secret 우와 2014.07.17 2
3267 델파이 프로그래밍언어 책 구입했는데요 [1] secret 나본좌 2012.04.10 2
3266 책 19쪽에 맨처음 하는 예제에서요 secret 나본좌 2012.04.11 2
3265 html5 buider 문의 드립니다. secret 2012.12.14 2
3264 Component들이 보이지 않습니다. secret 변보언 2013.01.22 2
3263 기본 bpl (rtl160.bpl등) 배포시 jdbg파일도 같이 배포해야 하나요? [1] secret 한림대의료원정보기술센터 2013.06.11 2
3262 string.format 함수의 한글 자리수 문제 secret kidb 2014.03.04 2
3261 비콘 안드로이스 샘플소스로 실행했는데 안됩니다. [2] secret kim 2015.12.04 2
3260 비콘신호 수신간격 조정을 어디서 해야하나요? [2] secret kim 2015.12.04 2
3259 DB Query 문의 드립니다. [1] secret memc 2012.05.16 3
3258 MessageDlg 관련 질문입니다. [1] secret 신산 2013.06.20 3
3257 [한미반도체] 64BIT PACKGE관련문의 secret 키루루 2014.08.20 3
3256 위험감지앱이 감지를 했을때만 화면표시를 할 수 있나요? [2] secret kim 2015.12.02 3
3255 ChannelManager을 이용한 콜백 문의 secret lespaul06 2015.02.04 3
3254 WebBrowser1 익스플로러 버젼 secret fanta 2015.01.31 3
3253 아래 질문에 대한 스크린샷 첨부입니다. [2] secret 조우상 2012.05.02 4