자유롭게 질의 및 응답을 할 수 있는 게시판입니다. 개발자 여러분의 답변이 큰 도움이 됩니다. 
  • 제품설치/등록 오류 문의: 설치/등록 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 37646
공지 유용한 관련 사이트 관리자2 2014.03.20 77175
» [공유] FireDAC-MySQL 사용 중 '!abc'와 같이 느낌표와 문자 사용 시 문자가 없어지는 현상이 발생합니다. 험프리 2017.05.16 813
1371 델파이 10 Seattle로 안드로이드 Nougat 개발. [1] hsson 2017.05.19 347
1370 delphi xe10 firemonkey로 개발한 앱 rooting 폰 및 중국폰 에서 사용 가능 유무 당신이먼저 2017.05.19 325
1369 ODBC 조합형으로 한글 처리 가능한지요? file 천공인 2017.05.20 334
1368 도수분포표 관련 Component 추천 [1] file 오짱이 2017.05.22 314
1367 Class TAdvStringGrid not found. Ignore the error and continue? 메시지 원인 [2] file kwy0702 2017.05.23 606
1366 XE3 / 프로젝트 옵션에서 Version Info가 이상해졌습니다. 해결방법 좀 알려주세요... file 마일드몽키 2017.05.23 266
1365 RAD 10.1 Berlin Android 개발관련 [2] 지는게취미 2017.05.23 315
1364 안드로이드 앱 테더링 연결 문제 [2] file YGPOS 2017.05.24 580
1363 TFDQuery 질문 [3] nickname 2017.05.24 1080
1362 도쿄로 빌드된 앱을 최소화했다가, 기존 실행되었던 앱을 클릭하면 글자의 배경색이 없어집니다. [4] file 델사냥 2017.05.25 370
1361 TCP Server + Webborker [1] 제트콜 2017.05.25 298
1360 안드로이드 타이머 화면꺼지면 동작이 잘 안되요 [1] 캔나영 2017.05.29 822
1359 FireDAC으로 Oracle 클라이언트 프로그램 배포시 [3] file 나도몰라 2017.05.29 1088
1358 db 운영 시 데이터 추가 안되는현상 file 전수정 2017.05.29 304
1357 FMX Edit 오류 패치 안되나요??? [2] 로로봉 2017.05.29 351
1356 ble 관련 질문 드립니다. [1] kimds 2017.05.30 326
1355 델파이xe win 7 64bit 설치문의 file kwy0702 2017.05.30 447
1354 DephiXE4 에디터에서 chinese글자가 깨집니다. RAD Studio 10.2 starter에는 [5] 바람 2017.05.30 391
1353 10.2 starter 언인스톨 문제 [3] 바람 2017.05.31 229