자유롭게 질의 및 응답을 할 수 있는 게시판입니다. 개발자 여러분의 답변이 큰 도움이 됩니다. 
  • 제품설치/등록 오류 문의: 설치/등록 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 19791
공지 유용한 관련 사이트 관리자2 2014.03.20 58761
공지 본 게시판은 개발자 여러분들의 질문과 답변을 공유하는 공간입니다. 관리자 2012.01.10 102313
1799 Datasnap 로 3티어 개발중에 [3] 제트콜 2016.06.16 634
1798 베를린 사용하고 있는데요 FireDac계열 컴포넌트 혹시 저만 한글이 깨지나요 [3] file 짧굵 2016.06.17 570
1797 안드로이드 MAC Address 찾기 [3] 광땡 2016.06.20 1860
1796 [베를린] 안드로이드로 빌드하면 Exec Error... PATH C:.... 오류가 발생합니다. [2] file 델사냥 2016.06.21 1135
1795 [RAD서버] DataSnap(데이터스냅)과 RAD서버의 차이점이 무엇인가요? 관리자 2016.06.24 284
1794 [RAD서버] RAD서버 애플리케이션이 지원하는 플랫폼이 무엇인지 궁금합니다. 관리자 2016.06.24 158
1793 [RAD서버] RAD서버에 socket.io 적용 여부가 궁금합니다. 관리자 2016.06.24 229
1792 idtcpserver 서버 찾기 superman 2016.06.25 192
1791 java2op를 이용하안 KT Open API 연동 문제 [3] file 새벽노을 2016.06.27 981
1790 [마이그레이션][델파이5] Excel 컴포넌트[ Servers]가 없어졌어요. file 험프리 2016.06.28 652
1789 Delphi에 동영상을 심을수 있나요? [2] syc 2016.06.28 261
1788 10.1 Berlin Datasnap Server Method문제 불나방 2016.06.29 182
1787 [마이그레이션][팁] 파라독스, dBase 데이터베이스 연결(FireDAC 이용) [1] file 험프리 2016.06.29 906
1786 윈도우10에서 콤보박스 한글처리시 문제...? [3] 헨씀히포 2016.06.30 4210
1785 델파이 platform "Win32" missing or unavailable 오류의 건 최슬기 2016.07.05 296
1784 unable to create process adb:error failed to copy 송세건 2016.07.06 165
1783 unable to create process adb:error failed to copy file 송세건 2016.07.06 292
1782 스트링그리드 라이브바인딩 사용시 데이터 로딩 속도에 관한 질문드립니다~ file 짧굵 2016.07.08 219
1781 필드명을 동적으로 사용하는 방법 [1] 아폴로 2016.07.08 4064
1780 안드로이드 ViewPager 구현 문의 [2] file 손주영 2016.07.08 341