자유롭게 질의 및 응답을 할 수 있는 게시판입니다. 개발자 여러분의 답변이 큰 도움이 됩니다. 
  • 제품설치/등록 오류 문의: 설치/등록 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 39585
공지 유용한 관련 사이트 관리자2 2014.03.20 79088
1129 델파이 10.2 도쿄에서 comport가 실행이 안되는 이유는 무엇일까요? [2] file 덩어리2 2019.10.21 492
1128 FireDac 에서 informix 연결이 안됩니다.. 도와주세요 [2] file 천공인 2020.09.18 492
1127 MDI프로그램에서 마우스 휠 동작시 Stack Overflow 발생 [1] nuribit 2020.09.24 492
1126 FastReport 관련 문의 [1] 쿤이 2021.07.12 492
1125 ADO, dbExpress FireDAC 20,000건 쿼리시 FireDAC이 제일 느린것이 맞나요? file 미스터몽키 2017.02.19 493
1124 델파이 STMP 개발문의 [1] 동네옹 2020.09.27 493
1123 사용자 컴포넌트 추가를 해도 tool Palette에 보이지 않음 [1] file 추도사 2021.04.14 493
1122 데이터스냅 콜백 오류 문의 [3] file 회원 2016.10.14 494
1121 delphi 10.3.2 TRestClient 구조가 변경된듯 [1] 미스터몽키 2019.09.22 494
1120 TButtonGroup의 item button 클릭시 Event [1] morak 2020.08.06 494
1119 일정시간 경과후 소켓에러 발생 [3] file 사랑남 2015.09.18 496
1118 XE8 JSON통신 오류 [2] file 똘귀아빠 2021.03.10 497
1117 delphi 7 구버전 설치 완료 후 실행시 문제 발생 [1] file 라신 2017.01.16 498
1116 델파이Xe2 에서 ExportGridToXLSX 엑셀 다운로드시 건수 [1] 가나다 2019.08.19 498
1115 블루투스를 사용하고싶습니다. [1] 쀼뱌라라 2018.04.09 499
1114 DataSnap Http관련 문의 [1] lespaul06 2015.04.07 499
1113 (Delphi 10) UPX 압축 문제 [1] 김재욱 2016.01.14 499
1112 [REST 웨비나] http와 https 호출시 주의 할것은? 험프리 2020.09.17 500
1111 Delphi 10.2 사용자 정의 컴포넌트 등록후 디자인타임에 안보임 file 미스터몽키 2019.08.23 501
1110 xe10.3.3 에서 단말기 Android 7.1.2 에 넣으면 오류 [1] file 광수생각 2021.03.17 502