2011-04-13 2 views
1

어떻게하면 벡터에서 다중 값을 C++을 사용하여 mysql 데이터베이스 테이블에 삽입합니까? 즉, mysql C++ 커넥터가 설치되지 않았습니다.C++을 사용하여 mysql db 테이블에 여러 값을 삽입 할 때 문제가 발생했습니다.

I는 다음과 같이 수동으로 행을 삽입 할 수 있습니다

#include cstdlib 
#include iostream 
#include mysql.h 
using namespace std; 

MYSQL *connection, mysql; 
MYSQL_RES *result; 
MYSQL_ROW row; 
int query_state; 

내 코드 :

query_state=mysql_query(connection,"insert into test values('boy','girl')"); 

하지만 파일이나 벡터에서 값을 읽을 필요가

감사

+0

에 오신 것을 환영합니다. '{} '버튼을 사용하여 질문에 형식 코드를 입력하십시오. –

답변

1

I 이렇게하려면 mysqls prepared statement API를 사용한다. 완전한 예제 here을 볼 수 있습니다.

벡터를 새 값으로 다시 바인딩하고 문을 다시 실행하면됩니다. 이 방법은 쿼리를 수동으로 구성하고 다시 실행하는 것보다 효율적이고 오류가 발생하기 쉽습니다 (SQL 주입 유형 공격으로 인해 어려움을 겪을 가능성이 적음).

다른 옵션 (좋지 않은 IMO는 아니지만주의하지 않으면 SQL 주입 문제가 더 간단 할 수 있음)은 문자열 스트림에서 쿼리를 구성하는 벡터를 반복 한 다음 문자열 스트림 버퍼를 사용하는 것입니다.

문자열 스트림 방법은 보이는 (검증되지 않은 아마도 버그)이 같은 비트 : 유래에

vector<pair<string,int> > values = get_my_values(); 
stringstream query; 
query<<"insert into test values"; 
for(vector<pair<string,int> >::iterator it = values.begin() ; 
    it != values.end(); 
    ++it) 
{ 
    query<<"(\""<<mysql_real_escape(connection, it->first.c_str())<<"\","<<it->second<<")"; 
    if(it+1 != values.end()) { query<<","; } 
} 
query_state=mysql_query(connection, query.str().c_str()); 
+0

@PeterSmith 덕분에 매우 도움이되었습니다. – airMan

관련 문제