자유롭게 질의 및 응답을 할 수 있는 게시판입니다. 개발자 여러분의 답변이 큰 도움이 됩니다. 
  • 제품설치/등록 오류 문의: 설치/등록 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 17188
공지 유용한 관련 사이트 관리자2 2014.03.20 56065
공지 본 게시판은 개발자 여러분들의 질문과 답변을 공유하는 공간입니다. 관리자 2012.01.10 99501
933 델파이 설치 에러 [1] file 건들다맞지 2018.06.26 436
932 Xe2 윈도우 10 설치 후 ide 실행시 Out of system resources [1] file kerry 2017.03.14 438
931 작일 세미나에서 문의드렸던 FireDac 모니터링 관련. [2] mckim 2019.10.18 440
930 TFDConnection TimeOut [1] 지구수비방위대 2021.07.06 440
929 HP amd노트북에서 안드로이드 컴파일시 에라내용 [4] file 화이부동 2016.09.25 441
928 10.2 도쿄에서 IBX(TIBQuery, TIBTable 등) 컴포넌트가 보이지 않습니다. file 험프리 2017.04.03 441
927 xe에서 리눅스 .so 파일 생성가능 [1] 개굴왕 2015.08.24 441
926 stringstream 에 배열 넣기 [2] devdev 2018.10.23 442
925 폼 hiegh는 변경가능하고 width고정으로변경불가로 하고싶음 blocks 2015.04.07 442
924 [XE8 출시세미나] 데이터스냅 서버나 EMS 서버를 확장 (Scale out) 할 수 있나요? [1] 관리자 2015.04.30 442
923 바코드 스캐너 관련문의 [2] file silkroad99 2017.04.24 443
922 [마이그레이션] F2613 Unit 'DBTables' not found 오류가 발생합니다. file 험프리 2020.04.07 443
921 bpl을 이용한 MDI 방식의 구성에서 DB커넥션의 공유는 어떻게 하는건가요? [1] 박종원 2016.03.14 443
920 Getit Package Manager 설치시 오류 [3] file 비앤케이 2019.11.25 444
919 10.3.3에서 TChart관련 문의드립니다. [2] ppqao 2020.06.22 444
918 NetChek.dll이(가) 프로그램을 시작할수 없습니다. [1] file 토토로 2015.09.21 444
917 [공유] 파이어몽키 버튼의 배경색상을 변경하고 싶습니다. 험프리 2019.02.20 445
916 앱 ini(설정정보) 저장방법 문의 [1] 사랑남 2015.06.10 446
915 델파이 실행오류 문의 [1] 가스차 2015.07.31 446
914 WebBrowser1 컴포넌트를 이용 중 문제점 [2] 사랑남 2015.03.12 447