자유롭게 질의 및 응답을 할 수 있는 게시판입니다. 개발자 여러분의 답변이 큰 도움이 됩니다. 
  • 제품설치/등록 오류 문의: 설치/등록 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 39524
공지 유용한 관련 사이트 관리자2 2014.03.20 79022
669 델파이7 마이그레이션 문의 [1] 오기영 2019.07.23 833
668 파일 열기 오류 kyh 2016.04.27 835
667 [XE8 출시세미나] EMS 푸쉬에서 클라이언트에서 푸쉬메시지 수신확인이 가능한가요? [1] Humphery 2015.04.30 835
666 delphi 10 seattle 버전 아이폰 앱 컴파일 오류 [5] file 사랑남 2015.09.23 836
665 델파이 XE8에서 쓰래드 디버깅 기능 향상된 것이 있나요? Humphery 2015.05.29 837
664 안드로이드 타이머 화면꺼지면 동작이 잘 안되요 [1] 캔나영 2017.05.29 838
663 Control Key를 누른 상태에서 마우스를 클릭하면 [5] 피터2 2015.11.02 838
662 ExportGridToXLSX 한글 & 특수 문자 사용시 오류 가나다 2021.02.10 838
661 XE10 컴파일시 에러가 나옵니다. [1] 텔로스김 2016.01.27 842
660 규모가 큰 프로젝트에서 코드 작성 시 IDE 응답없음이 자주 발생합니다. file 험프리 2017.01.25 842
659 C# DLL 함수정의를 델파이에서 어떻게 하나요? [1] madoka 2020.07.24 843
658 [Debug 64bit ERR] 윈도우 10 디버깅 오류 관련 문의 file 이수엽 2017.02.15 844
657 델파이는 왜 최소화, 최대화, 끄기 버튼을 새로 만드나요? [3] 엽기토끼이요 2019.03.14 849
656 SetFocus 문의입니다 [2] 아폴로 2016.04.29 851
655 CodeSiteExpress 관련 문의드립니다. [1] 비내림 2016.02.15 853
654 BindingsList1 properties의 autobuffercount [1] silkroad99 2015.01.27 856
653 delphi 10.2 Active X 등록 방법 [1] 건들다맞지 2018.05.30 858
652 카메라 실행 오류문의 [2] file kim 2015.11.16 859
651 안드로이드 외부앱 실행 가능한가요 [1] kerry 2016.04.21 861
650 xe8 에서 mssql서버 접속방법 [1] 윤영일 2015.07.18 862