새로운 글
새로운 덧글

Q&A 게시판은 누구나 자유롭게 질의 및 응답을 할 수 있는 게시판이며 
어느 누구도 답변을 달아야만 하는 의무는 없습니다. 
만약 제품 구매 고객께서 제품설치, 등록, 제품 오류 등의 문의사항이 있으신 경우,  
좌측 메뉴에서 설치/등록/버그 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로 변경합니다.

번호 제목 글쓴이 날짜 조회 수
공지 데브기어 강의 - 2017년 11월~2017년 12월 관리자 2015.01.22 5239
공지 유용한 관련 사이트 관리자2 2014.03.20 42811
공지 본 게시판은 개발자 여러분들의 질문과 답변을 공유하는 공간입니다. 관리자 2012.01.10 84815
1897 Tokyo 에서 컴파일 후 실행파일에 Malware 로 잡히는 증상발생 [3] file 크루노 2017.05.16 93
» [공유] FireDAC-MySQL 사용 중 '!abc'와 같이 느낌표와 문자 사용 시 문자가 없어지는 현상이 발생합니다. 험프리 2017.05.16 41
1895 델파이 10.1 - 안드로이드 서비스 개발시 'activity not found, maybe you are in a service' 에러 [3] 봄이아빠 2017.03.30 119
1894 xe10.2 버전 서브 폼닫기 안됨 [2] 텔로스김 2017.05.12 82
1893 xmpp와 mqtt에 대해서 문의사항있어요 [1] 엠카바데로 2017.05.15 54
1892 [공유] 10.2 도쿄에서 리본컨트롤을 찾을 수 없습니다. file 험프리 2017.05.12 70
1891 [FireDAC][Stan][Def]-254 오류 해결방법 [1] 밥먹자 2017.05.12 54
1890 IBConsole에서 연결을 실패합니다.(오류 : Unable to complete network request to host...) file 험프리 2017.05.11 68
1889 오류 추적중입니다.... 도의 2017.05.11 50
1888 centos 6.9 환경에 PA서버 설치시 문의입니다. [3] 운땡최향태 2017.05.10 128
1887 어떤 인터넷 주소에 연결했는지 알수있는 방법 없을까요! [1] 루피 2017.04.28 47
1886 10.2 에서 안드 빌드시 [ldandroid Error] "ld" exited with code 1. 에러문제 [1] 크루세더 2017.04.29 70
1885 [DCC Error] E2597 C:\Users\Public\Documents\Embarcadero\Studio\15.0\PlatformSDKs\android-ndk-r9c\toolchains\arm-linux-androideabi-4.6\prebuilt\windows\bin\arm-linux-androideabi-ld.exe: error: cannot find -ldl [1] 라빌레나 2017.05.04 60
1884 webbroker vs idhttpserver [1] 제트콜 2017.05.05 31
1883 안드로이드에서 app 실행 후 백그라운드시 이벤트는 어떻게? [1] devpro 2017.05.05 65
1882 Delphi 10 Seattle 안드로이드 WDSL 오류 [1] 작은고추 2017.05.05 44
1881 FDMemTable 를 Query 로 읽기 [1] 송동진 2017.05.06 74
1880 maria DB 연결 [2] 전수정 2017.05.08 108
1879 윈도우10 크리에이터스 업데이트 후 DateTimePicker 관련 오류문제 [3] 루키 2017.05.02 369
1878 안드로이드 앱 배포 시 'INSTALL_PARSE_FAILED_NO_CERTIFICATES' 메시지가 나타납니다 [2] file 손보라 2017.04.27 142


광고 모듈이 설치되어 있지 않아 실행을 중단합니다..