자유롭게 질의 및 응답을 할 수 있는 게시판입니다. 개발자 여러분의 답변이 큰 도움이 됩니다. 
  • 제품설치/등록 오류 문의: 설치/등록 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 17187
공지 유용한 관련 사이트 관리자2 2014.03.20 56062
공지 본 게시판은 개발자 여러분들의 질문과 답변을 공유하는 공간입니다. 관리자 2012.01.10 99498
673 RawByteString 클래스 사용이 안됩니다 [1] 손보라 2018.07.19 202
672 파이어닥 관련하여 궁금점이 있습니다. [1] 이즈로즈 2018.07.24 202
671 모바일 앱개발 기술지원요청 [2] 파란김치 2018.07.25 155
670 상위버전에서 지원하는 REST.JSON 또는 System.JSON 을 사용할 수 있을까요? [2] 도의 2018.07.27 195
669 Delphi와 C++Builder를 하나의 컴퓨터에 동시에 설치할 수 있나요? [3] file 얼짱나 2018.07.30 295
668 오라클 클라이언트를 설치하지 않고 오라클 서버에 접속 할 수 있는 방법이 없나요? [2] 맛재현 2018.07.30 461
667 PointMobileBI07모델 샘플자료 에러입니다. [1] 김종찬 2018.07.30 134
666 오픈소스 scannerMapp 에서 아래와 같은 에러가 나옵니다. [1] 김종찬 2018.07.30 333
665 API 레벨 26 (안드로이드 80) 이상이 적용패치 언제 될까요 [1] silkroad99 2018.07.30 215
664 시간 또는 분을 추가하고 싶어요. 험프리 2018.07.31 192
663 델파이 Query.Reflesh와 DataSource.DataSet.ReFlesh의 차이점은? [1] 스카이 2018.07.31 756
662 XE10.2 에서는 Report Tool 이 없나요? [1] midas 2018.08.06 178
661 델파이와 라드스튜디오 차이점 [1] 100jk 2018.08.07 619
660 델파이 설치 시 제품 키 유효기간을 알고싶습니다. [1] 얼짱나 2018.08.13 180
659 블루투스 스캐너 소스로 테스트중입니다. 첨부파일처럼 에러가 납니다. 도와주세요. [1] file 김종찬 2018.08.13 192
658 Raize component 전수정 2018.08.14 136
657 안드로이드 어플 개발중 블루투스 페어링 액티비티 제어 file Operationbt 2018.08.23 577
656 delphi 10.2 오류 [1] file midas 2018.08.24 175
655 REST.JSON 적용문의 [1] cleo0917 2018.08.27 202
654 델파이 안드로이드 API 26에 관한 질문입니다. [3] 시리온느 2018.08.30 301