자유롭게 질의 및 응답을 할 수 있는 게시판입니다. 개발자 여러분의 답변이 큰 도움이 됩니다. 
  • 제품설치/등록 오류 문의: 설치/등록 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 58762
공지 본 게시판은 개발자 여러분들의 질문과 답변을 공유하는 공간입니다. 관리자 2012.01.10 102315
1079 c++ Builder에도 메모리 릭을 감지할수 있는 툴이 있나요? [3] junho103 2018.03.06 605
1078 델파이 XE CODE 1400 에러문의 [1] file 후두리찹찹 2018.03.06 251
1077 CPort 관련 에러 [1] file 양승현 2018.03.07 244
1076 divide by zero를 try catch 하는법 한시민 2018.03.08 311
1075 10.2 tokyo JDK 문제 팁입니다.[질문아님] [1] 제이트 2018.03.08 233
1074 XE7 OpenCV 이용시 질문 [1] judvika 2018.03.09 227
1073 이미지 StretchDraw문 사용시 글자 깨져 다른 방법 좀 알려주세요? [1] 루카 2018.03.13 543
1072 Raize BizComps 관련 문의 사항 [1] 김정명 2018.03.13 154
1071 델파이 빌드 에러 [2] 웅재 2018.03.15 435
1070 Android Target에서 외부 database 2티어 접속 [1] 허준영 2018.03.15 286
1069 datasnap 구현 미들웨어 세션 물고 있는 현상 [1] 생각 2018.03.15 318
1068 [마이그레이션 세미나] 파이어 몽키 버전으로 마이그레이션 시 고려해야될 사항들이 궁금합니다. 험프리 2018.03.16 116
1067 [마이그레이션 세미나] V3에서 BDE충돌이 많아서 BDE말고 다른 방법으로 변경하고 싶습니다. 험프리 2018.03.16 152
1066 [마이그레이션 세미나] 마이그레이션 대체 무엇인가 험프리 2018.03.16 146
1065 GotoBookmark(pointer(DBGrid2.SelectedRows.Items[i])) 에러... [1] 왕초보 2018.03.16 498
1064 델파이xe 10.2 윈도우10 설치시 Editor창 문자열 한글 크기가 너무 작아집니다. [1] file 미스터몽키 2018.03.17 1133
1063 XE 버전과 호환가능한 Windows 버전 알려주세요....ㅜㅜ [5] soo583 2018.03.19 330
1062 안녕하세요 db그리드에서 한글이 물음표로 출력되는것에 대해 질문드리고 싶어요. [4] file vast 2018.03.19 423
1061 웹뷰 브라우저 컨트롤 가능한가요? [2] 굿맨 2018.03.20 905
1060 RadStudio tokyo 10.2.3 설치 후 TMapView Error [2] 제우스 2018.03.21 266