자유롭게 질의 및 응답을 할 수 있는 게시판입니다. 개발자 여러분의 답변이 큰 도움이 됩니다. 
  • 제품설치/등록 오류 문의: 설치/등록 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 15634
공지 유용한 관련 사이트 관리자2 2014.03.20 54464
공지 본 게시판은 개발자 여러분들의 질문과 답변을 공유하는 공간입니다. 관리자 2012.01.10 97830
1573 엑셀 내보내기 버전지 [1] 그몽이 2019.06.12 230
1572 Datasnap(midas) 사용시 조회 자료를 ADOQuery 에 넣고 싶습니다. [1] 블랙 2019.06.13 171
1571 ClientDataSet 사용중입니다. 이미지 또는 파일을 테이블에 넣을시 에러입니다. 어떻게들 하시나요? [1] 블랙 2019.06.14 204
1570 델파이 시애틀 사용자입니다. MariaDB [2] 시리온느 2019.06.25 301
1569 XE5 겔럭시디바이스 연결 [2] file 넓다란세상 2019.06.24 146
1568 Data Explorer의 dbExpress 항목에 누락된 것이 있습니다. 루키 2019.06.24 111
1567 PluginMain.pas(14): E2225 Never-build package 'F8PluginCore' must be recompiled file ucucucu 2019.06.24 161
1566 제브라 프린터 한글 출력 문제 [2] max 2019.06.19 1519
1565 쇼핑몰 결제시스템관련 질문 유정 2019.06.24 192
1564 XE5 Firemonkey Mobile 넓다란세상 2019.06.22 64
1563 혹시 창 사이즈 고정하는 방법이 있을까요? 짱구 2019.06.21 235
1562 델파이 10.3.1에서 IOS 환경 설정 관련해서 질문 드려요. [3] 짱구 2019.06.15 213
1561 델파이5 Indy9 소켓 관련 문의 땡이 2019.06.19 152
1560 TIWRegion not found 문의 생각 2019.06.13 109
1559 stringgrid에 넣은 Image 클릭 이벤트 발생을 어떻게 해야 하나요? [1] 초보델팡이 2019.06.11 343
1558 오픈소스 scannerMapp 에서 아래와 같은 에러가 나옵니다. [1] 김종찬 2018.07.30 323
1557 메뉴나 에러메시지 한글 / 영문 선택 ... [2] 초보델팡이 2019.05.31 247
1556 android 64비트를 알아내는법? [2] 100jk 2019.06.09 194
1555 Form BorderStyle:=bsNone 일때 화면 깜박임 softkim 2019.06.09 353
1554 어떤 때 Form 추가가 안나타날 수 있죠? [3] file 거북선생 2019.06.02 265