2010-08-17 14 views
2

이 질문은 정말 쉽지만 C++과 MySQL의 멍청한 사람입니다. 그래서 여전히 작동하지 않습니다. 여기 MySQL을 MySQL에 삽입하는 방법은 무엇입니까?

는 거래이다 : 내가 문자열 (_bstr_t)가 XML을 포함하고 내가 MySQL의에서 longblolb 컬럼에 저장하고자합니다. 이 서버 및 localY하지만 일,이

  1. 로컬 파일 및 사용 MySQL의 명령 LOAD_FILE 내 XML을 작성하고,으로이 방법을 사용하는 것이 안전하지 않습니다 :

    방법은 내가 실패 시도 서버

  2. 사용는 mysql_real_escape_string() 나는 갈 방법 IST 생각하지만,이 기능은 문자의 *를 취하고 그

이 MySQL의 또는에서 XML을 저장하는 다른 방법이 있습니까 작동하지 않습니다 그래서 멀티 바이트 문자열을 거기에있다. multibyte를위한 mysql_real_escape와 같은 함수.

는 "액세스 위반 읽기 위치 ..."나는 캐스팅을 시도 때 좋은 보이지만 마침내 나는 MySQL의 오류가 있었다 나를 주시는 strcpy를 나던 작업 다음에 대한

"Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '?xml version=\"1.0\" encoding=\"UTF-16\"?>\r\n XV_Object noNamespaceSchem' at line 1"

그리고 마침내를, 당신이 나에게 준 첫 번째 해결책은, 나는 C++을 처음 접했고, char *를 넣을 곳을 모른다. 나는 컴파일 할 수 없다.

char *to = new char[xml.length() * 2 + 1]; 
char* from = (char*)xml::char*; 
mysql_real_escape_string(conn,to,from,xml.length()); 

감사합니다.

답변

0

필자가 아는 한, Microsoft가 제공하는 것처럼 쉽습니다. : char *.

_bstr_t 객체에 문자열이 있다면, 그 트릭을 수행해야하는 mysql_real_escape_string (your_object :: char *)을 수행하십시오.

이것이 실패하면 strcncpy를 사용할 수도 있습니다. (주석 후)

아이디 :

char* xml = (char*)the_xml_you_loaded; 
mysql_real_escape_string(xml); 

편집 :

char xml[200]; 
_bstr_t the_xml_you_loaded; 
strcncpy(xml,(char*)the_xml_you_loaded, sizeof(xml)); 

마지막으로, 당신은 단순히 *는 char _bstr_t에서 캐스팅 수 : 이 같은 것을 할 수 "new"를 사용할 때마다 마지막에 delete를 호출하여 원하지 않는 메모리 오류를 제거하십시오. 이것은 당신의 문제와 관련이 없으며 따라야하는 일반적인 조언 일뿐입니다.

내 첫 번째 솔루션에서는 _bstr_t 개체 뒤에 :: char *를 넣으십시오. 예 : 다음과 같은 경우 :

_bstr_t xml; 

그런 다음 수행하십시오.

xml::char* 

그리고이를 mysql_real_escape 문자열의 매개 변수로 사용하십시오.난 그냥

char* somevar = (char*)xml; 

함께 쓰고는 mysql_real_escape_string로 전달과 같은 주조에 그리고 또, 그것을 할. 다음에 무언가가 컴파일되지 않고 오류가 게시되는 것뿐만 아니라 오류가 게시됩니다.

+0

(part1) 안녕하세요, Robin, 빠른 답변 주셔서 대단히 감사합니다. strcpy do not't work는 "Access violation reading location ..."을 제공합니다. 캐스트를 시도했을 때 잘 보이지만 마지막으로 MySql 오류가 발생했습니다 : "오류 : SQL 구문에 오류가 있습니다. " \ r \ n 근처에서 사용할 올바른 구문에 대한 MySQL 서버 버전에 해당하는 매뉴얼" 마지막으로, 당신이 나에게 준 첫 번째 해결책은 C++을 처음 접했을 때 나는 숯불을 넣을 곳을 모른다. 컴파일 할 수 없다. – Nick

+0

(part2) 캐스트의 경우이 작업을 수행했지만 컴파일되지 않습니다. char * to = new char [xml.length() * 2 + 1]; char * from = (char *) xml :: char *; mysql_real_escape_string (conn, to, from, xml.length()); 도움을 주셔서 감사합니다. – Nick

+0

안녕하세요, Robin, 정말 고마워요, 이제 작동합니다! 시간 내 주셔서 대단히 감사 드리며 앞으로의 게시물에 대한 자세한 내용을 알려 드리겠습니다. 좋은 하루 보내십시오. – Nick

관련 문제