2017-05-22 5 views
0

내 간단한 varchar 필드에 "?"가 포함되어 있으면 TOAD에서 MySQL 스크립트 (삽입)를 실행하고 있습니다. 또는 ":"라고 입력하면 TOAD는 변수 (@ f0)를 바인딩하도록 요청합니다. 및 ":"LITERALLY 문장에서.왜 "?"와 같은 문자가 포함 된 단순한 varchar 삽입이 필요합니까? 및 ":"MySQL에서 바인딩 변수를 묻는?

나는 = 'PIPES_AS_CONCAT'SET의 sql_mode에 필요 의 모든 인스턴스를 대체 "?"":" to || CHAR (63) ||을 유효하게 설정하십시오. 내가 "\?" 또는 "\ :" 작동하지 않는 다른 특수 문자를 이스케이프 처리하는 것과는 다른 방식입니다.

SET sql_mode = 'PIPES_AS_CONCAT'; 
INSERT INTO `specs` (`ID`, `ParentProductsID`, `SpecsGroup`, `SpecsSubGroup`, `SpecsSubGroup2`, `SpecsText`) VALUES (1289, 27, 'What\'s in the box' || CHAR(63) || '', '', '', 'User guide'); 

쉬운 방법이 있나요 :

INSERT INTO `specs` (`ID`, `ParentProductsID`, `SpecsGroup`, `SpecsSubGroup`, `SpecsSubGroup2`, `SpecsText`) VALUES (1289, 27, 'What\'s in the box?', '', '', 'User guide'); 

이 문장은 내가 더 오래 잘하지만 어떤 작품과 같이하지 않는 한, 변수 @의 F0를 결합하도록 요구?

참고 : TOAD를 MySQL 용으로 사용하고 있습니다. 다른 SQL Editor에 대해서는이 문제가 발생할 수 있습니다.

업데이트 : 이것은 PHPMyAdmin에서 시도했을 때 제대로 작동하며 "?" 말 그대로 모든 삽입물에.

+0

는 쉬운 방법이 있나요? 예,'PDO' 또는'MySQLi' ** 준비 문구 **를 사용하십시오. MySQL을 직접 사용하는 경우 Prepared Statements를 꺼야합니다. * **) – Martin

+0

json에서 SQL을 얻으면 프로그래밍 언어를 사용하여 데이터베이스에 액세스하므로 모든 논리를 수행 할 수 있습니다. 준비된 문 사용하기 – Jens

+0

또한 API를 통해 SQL 문을 보내고 실행하는 것은 매우 위험합니다. – Jens

답변

0

이 대답하지만, 더 자세한 질문 (아직 )되지 않습니다 :

내가 무슨 일이 일어나고 것은 어떻게 든 문자열이 때문에 SQL 실현하지 않는 이스케이프되고 있다는 것입니다 의심 ?/:은 리터럴입니다.

read the manual이 있습니까?

  • TOAD는 주어진 SQL 명령을 자동으로 이스케이프합니까 (이중 이스케이프 처리)?

  • MySQL 명령 줄로 직접 작업하여 문제가 있는지 확인할 수 있습니까?

  • 데이터를 here?에 삽입 할 수 있습니까? 인용 부호가 포함되어 있지 않거나 이스케이프 처리되어 있지 않거나 그렇지 않은 경우 이러한 요소가 관련되어 있는지 확인하십시오.

  • 명령 줄을 사용할 수 없다면 다른 SQL 인터페이스를 사용해도 문제가 TOAD에 특정한 것인지 확인할 수 있습니까?

  • TOAD 설정을 점검하여 모든 SQL이 Prepared Statement가되도록 자동으로 설정되지 않았는지 확인할 수 있습니다. (그래 설정을 빨대에 쥐고 ...하지만 항상 확인!)