자유롭게 질의 및 응답을 할 수 있는 게시판입니다. 개발자 여러분의 답변이 큰 도움이 됩니다. 
  • 제품설치/등록 오류 문의: 설치/등록 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 17208
공지 유용한 관련 사이트 관리자2 2014.03.20 56084
공지 본 게시판은 개발자 여러분들의 질문과 답변을 공유하는 공간입니다. 관리자 2012.01.10 99523
653 앱 카드 및 소액 결제 문의 [1] 사랑남 2015.03.12 697
652 delphi XE8에서 Paradox 연결 [1] file 써니 2015.06.26 701
» [공유] FireDAC-MySQL 사용 중 '!abc'와 같이 느낌표와 문자 사용 시 문자가 없어지는 현상이 발생합니다. 험프리 2017.05.16 701
650 [오픈소스] Python for Delphi(P4D) 설치 및 watson conversation api 연동 [3] 신현아빠 2017.12.19 703
649 엑셀 저장 오류 [5] 똘귀아빠 2020.04.27 706
648 스트링그리드에서 숫자 표현 방법을 문의 합니다 [1] 손보라 2017.08.07 710
647 영상 녹화 및 캡쳐 - OpenCV 설치?? [1] file midas 2018.07.03 710
646 LiveBinding을 이용하여 DB와 Grid, Edit를 연결하고 DB에 변경된 데이터를 저장하는 방법 문의드립니다. [2] 기룬이 2016.06.09 713
645 델파이 XE8에서 쓰래드 디버깅 기능 향상된 것이 있나요? Humphery 2015.05.29 716
644 [XE7] 버그 게시판에 올린 문제점은 보고가 된 상태인지요?T_T [2] 사조성 2014.12.27 718
643 델파이XE8에서 2차원배열 넘기기가 기존과 바뀌엇나요? [2] 헨씀히포 2016.02.27 719
642 파일 열기 오류 kyh 2016.04.27 721
641 CodeSiteExpress 관련 문의드립니다. [1] 비내림 2016.02.15 725
640 1msec 이하 타임클럭 문의!! [4] 산으로가자요 2018.01.18 726
639 ADOconnection 에서 MDB 파일 연결 질문입니다... [2] 초보델팡이 2019.05.15 731
638 TMediaPlayer.Open 중 Invalid floating point operation 에러 발생 [4] Jack 2020.06.29 731
637 [Debug 64bit ERR] 윈도우 10 디버깅 오류 관련 문의 file 이수엽 2017.02.15 733
636 혹시 C#처럼 함수의 설명을 사용자가 정의할수 있을까요? 캬훌훌 2015.01.07 735
635 XE10 컴파일시 에러가 나옵니다. [1] 텔로스김 2016.01.27 736
634 Access Violation 에러 때문에 map파일로 확인하려고 하는데 잘 안됩니다ㅜ [1] file 맛재현 2017.04.24 737