2012-06-29 3 views
0

이것은 mysql 삽입을위한 C++ 코드 조각입니다. mysql.h로 어떻게 수행하는지 예제를 발견했다. mysql에 다음을 추가 할 때까지 프로그램이 잘 돌아 간다. 나는 C++을 처음 사용하고 다른 코드에서 같은 예제를 발견했다. 단지 mysql.h 대신 mysql/mysql.h를 추가하고 -i와 -l을 추가하여 문제를 지적 할 수 없다. 웹은 여전히 ​​운이 없다. 어떤 도움을 주시면 감사하겠습니다.mysql/mysql.h C++ 오류

#include <mysql/mysql.h> 


string unknown = "Unknown" 

MYSQL *conn; 

conn = mysql_init(NULL); 
mysql_real_connect(conn, "localhost", "root", "password", "alert", 0, NULL, 0); 

mysql_query(conn, "INSERT INTO alert_tbl (alert_srcip, alert_country, alert_destip, alert_desthost, alert_destport, alert_bl) VALUES ('%s','%s','%s','%s','%s','%s')", src_ip,country_code,dest_ip,unknown,dest_prt,blip); 

mysql_close(conn); 

그램 ++ TEST.C -o 테스트 -lstdC++ -I는/usr/포함/mysql을 -L는/usr/lib 디렉토리/mysql을 -lmysqlclient

TEST.C : 오류 : 예상, 또는; MYSQL 전에

TEST.C : 오류 : CONN가이 범위에서 선언되지 않은

TEST.C : 오류 : CONN가이 범위에서 선언되지 않은

답변

2

누락 세미콜론

string unknown = "Unknown"; 

mysql_query에 대한 호출에 너무 많은 매개 변수가 있습니다. 그것은 "printf"스타일 함수가 아닙니다. sql injection attack의 위험을 감수하면서 sprintf를 별도의 버퍼에 사용할 수 있습니다. parameterized queries을 사용해야합니다.

+0

나는 바보 같은 느낌. 나는 사무실 공간에 대한 10 진 사건과 같은 느낌이 든다. 감사. – SP3CH8TR

+0

mysql_query는 두 개의 매개 변수만을 사용합니다. 그런 전체 문자열을 전달하려는 경우 먼저 sprintf를 사용한 다음 결과 문자열을 전달해야합니다. 그러나 SQL 인젝션 공격 가능성이 있습니다. 매개 변수화 된 쿼리를 사용해야합니다. –