2011-12-27 2 views
1

C++에서 임베딩 서버 (mysqld와 연결)를 사용하여 mysql 데이터베이스에 연결 중입니다. 나는 다음과 같은 코드가 있습니다 :mysql embedded 및 --local-infile = 1을 C++와 함께 사용 하시겠습니까?

static char *server_options[] = \ 
     { (char *)"mysql_test", 
      (char *)"--datadir=/home/cquiros/temp/mysql/db2", 
      (char *)"--default-storage-engine=MyISAM", 
      (char *)"--loose-innodb=0", 
      (char *)"--local-infile=1", 
      (char *)"--skip-grant-tables=1", 
      (char *)"--myisam-recover=FORCE", 
      (char *)"--key_buffer_size=16777216", 
      (char *)"--character-set-server=utf8", 
      (char *)"--collation-server=utf8_bin", 
      NULL }; 

     int num_elements = (sizeof(server_options)/sizeof(char *)) - 1; 

     mysql_library_init(num_elements, server_options, NULL); 
     m_mysql = mysql_init(NULL); 

     char enable_load_infile = 1; 
     if (mysql_options(m_mysql,MYSQL_OPT_LOCAL_INFILE, (const char *)&(enable_load_infile))) 
      qDebug() << "Error setting option"; 

     mysql_real_connect(m_mysql, NULL,NULL,NULL, "database1", 0,NULL,0); 

연결 작품과 내가 쿼리 내가 실행하려고 할 때 난 항상 "사용 된 명령과 함께 사용할 수 없습니다 얻을"데이터를로드 지역 INFILE을 ... "그러나 테이블을 만들 수 있습니다 내가 잘못 뭐하는 거지

char enable_load_infile = 1; 
     if (mysql_options(m_mysql,MYSQL_OPT_LOCAL_INFILE, (const char *)&(enable_load_infile))) 
      qDebug() << "Error setting option"; 

모든 아이디어를 어떻게 해결하는 방법 : I는 서버 옵션에 --local-INFILE = 1을 설정하거나 코드에서 설정하고 경우에도이 MySQL 버전? "

많은 도움에 감사드립니다. 카를로스.

답변

1

@ NTands이 질문을 한 지 1 년이 넘은 것을 알고 있지만, 저 같은 다른 사람들이 해결책을 찾고있는 경우를 대비해 후대에 답장 할 것이라고 생각했습니다.

동일한 문제가 있는데, /etc/mysql/my.cfg 파일에서 명시 적으로 활성화 한 후에도 Linux mysql CLI에서 LOAD DATA LOCAL INFILE 문을 사용할 수 있습니다. 그러나 MySQL C++ 커넥터에서 작동하도록 할 수 없습니다. MySQL C++ 커넥터를 통해 LOAD DATA LOCAL INFILE 명령을 실행하면 "이 사용 된 명령은이 MySQL 버전에서 허용되지 않습니다"라는 오류 메시지가 나타납니다. 뭐라구?

많은 부지런한 검색 및 일부 뒷 골목 기술 지원 게시물을 찾은 후 MySQL C++ 커넥터가 개발자가 로컬 infile을 허용 할 수있는 기능을 구현하기로 결정하지 않은 것으로 결론을 내 렸습니다. = 1 옵션. 분명히 어떤 사람들은 MySQL C++ 커넥터를 해킹/포크하여 기능을 공개 할 수는 있지만 아무도 소스 코드를 게시하지 않았습니다. 당신이 연결이을 사용 초기화 후 분명히 MySQL의 C API의 해결 방법이 있습니다 :

여기
mysql_options(&mysql, MYSQL_OPT_LOCAL_INFILE, 1); 

이 결론에 저를 이끌어 일부 참조 기사입니다

1) How can I get the native C API connection structure from MySQL Connector/C++?

2) Mysql 5.5 LOAD DATA INFILE Permissions

3) http://osdir.com/ml/db.mysql.c++/2004-04/msg00097.html

LOAD DATA LOCAL INFILE 기능을 사용하려면 기본적으로 mysql C API를 사용하거나 명령 줄에서 실행하거나 기존 mysql C++ api를 해킹/포크하여 연결 구조를 노출해야합니다. : (